Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Properly call Actor::on_destruction() in maestro context
authorMartin Quinson <martin.quinson@ens-rennes.fr>
Sat, 26 Jan 2019 20:12:37 +0000 (21:12 +0100)
committerMartin Quinson <martin.quinson@ens-rennes.fr>
Sat, 26 Jan 2019 20:20:29 +0000 (21:20 +0100)
This induces a harmless change in trace-process-migration.tesh and
fixes the s4u-actor-exiting example \o/

examples/deprecated/msg/trace-process-migration/trace-process-migration.tesh
examples/s4u/CMakeLists.txt
src/kernel/context/Context.cpp

index 620a1d8..3787172 100644 (file)
@@ -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
 > 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
 > 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
 > 7 18.155073 6 41
 > 7 18.155073 2 16
 > 7 18.155073 2 14
index 649c59b..6b476fa 100644 (file)
@@ -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()
 
                                    ${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
 set_tesh_properties(s4u-platform-failures "thread;ucontext;raw;boost" WILL_FAIL TRUE) # FIXME
 
 # Multi-files examples
index 6bb6e89..c28bf7b 100644 (file)
@@ -95,7 +95,6 @@ void Context::stop()
   actor_->finished_ = true;
 
   // Execute the termination callbacks
   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();
   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
     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;
 }
 
   this->iwannadie = true;
 }