From 0f452f653f11ac26c21fff61b8d17c6137fcba85 Mon Sep 17 00:00:00 2001 From: Martin Quinson Date: Sat, 26 Jan 2019 21:12:37 +0100 Subject: [PATCH] Properly call Actor::on_destruction() in maestro context This induces a harmless change in trace-process-migration.tesh and fixes the s4u-actor-exiting example \o/ --- .../trace-process-migration/trace-process-migration.tesh | 2 +- examples/s4u/CMakeLists.txt | 1 - src/kernel/context/Context.cpp | 6 ++++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/examples/deprecated/msg/trace-process-migration/trace-process-migration.tesh b/examples/deprecated/msg/trace-process-migration/trace-process-migration.tesh index 620a1d87d1..37871723c0 100644 --- a/examples/deprecated/msg/trace-process-migration/trace-process-migration.tesh +++ b/examples/deprecated/msg/trace-process-migration/trace-process-migration.tesh @@ -356,9 +356,9 @@ $ tail -n +3 procmig.trace > 13 18.138521 7 41 > 12 18.138521 7 41 10 > 13 18.155073 7 33 -> 7 18.155073 6 33 > 13 18.155073 7 41 > 16 18.155073 14 0 SR 41 p8 +> 7 18.155073 6 33 > 7 18.155073 6 41 > 7 18.155073 2 16 > 7 18.155073 2 14 diff --git a/examples/s4u/CMakeLists.txt b/examples/s4u/CMakeLists.txt index 649c59b188..6b476fa341 100644 --- a/examples/s4u/CMakeLists.txt +++ b/examples/s4u/CMakeLists.txt @@ -30,7 +30,6 @@ foreach (example actor-create actor-daemon actor-exiting actor-join actor-kill ${CMAKE_HOME_DIRECTORY}/examples/s4u/${example}/s4u-${example}.tesh) endforeach() -set_tesh_properties(s4u-actor-exiting "thread;ucontext;raw;boost" WILL_FAIL TRUE) # FIXME set_tesh_properties(s4u-platform-failures "thread;ucontext;raw;boost" WILL_FAIL TRUE) # FIXME # Multi-files examples diff --git a/src/kernel/context/Context.cpp b/src/kernel/context/Context.cpp index 6bb6e89c65..c28bf7b2f1 100644 --- a/src/kernel/context/Context.cpp +++ b/src/kernel/context/Context.cpp @@ -95,7 +95,6 @@ void Context::stop() actor_->finished_ = true; // Execute the termination callbacks - simgrid::s4u::Actor::on_destruction(actor_->iface()); smx_process_exit_status_t exit_status = (actor_->context_->iwannadie) ? SMX_EXIT_FAILURE : SMX_EXIT_SUCCESS; while (not actor_->on_exit.empty()) { s_smx_process_exit_fun_t exit_fun = actor_->on_exit.back(); @@ -115,7 +114,10 @@ void Context::stop() this->cleanup_func_(this->actor_); this->iwannadie = false; // don't let the simcall's yield() do a Context::stop(), because that's me - simgrid::simix::simcall([this] { SIMIX_process_cleanup(this->actor_); }); + simgrid::simix::simcall([this] { + simgrid::s4u::Actor::on_destruction(actor_->iface()); + SIMIX_process_cleanup(actor_); + }); this->iwannadie = true; } -- 2.20.1