Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
inline a function
authorMartin Quinson <martin.quinson@ens-rennes.fr>
Sat, 26 Jan 2019 19:49:06 +0000 (20:49 +0100)
committerMartin Quinson <martin.quinson@ens-rennes.fr>
Sat, 26 Jan 2019 20:20:29 +0000 (21:20 +0100)
include/simgrid/simix.h
src/kernel/context/Context.cpp
src/simix/ActorImpl.cpp

index 73a6bb1..3f1bb78 100644 (file)
@@ -157,7 +157,6 @@ XBT_PUBLIC const char* SIMIX_process_self_get_name();
 XBT_PUBLIC void SIMIX_process_self_set_data(void* data);
 XBT_PUBLIC void* SIMIX_process_self_get_data();
 XBT_PUBLIC int SIMIX_process_has_pending_comms(smx_actor_t process);
 XBT_PUBLIC void SIMIX_process_self_set_data(void* data);
 XBT_PUBLIC void* SIMIX_process_self_get_data();
 XBT_PUBLIC int SIMIX_process_has_pending_comms(smx_actor_t process);
-XBT_PUBLIC void SIMIX_process_on_exit_runall(smx_actor_t process);
 XBT_PUBLIC void SIMIX_process_on_exit(smx_actor_t process, int_f_pvoid_pvoid_t fun, void* data);
 SG_END_DECL()
 
 XBT_PUBLIC void SIMIX_process_on_exit(smx_actor_t process, int_f_pvoid_pvoid_t fun, void* data);
 SG_END_DECL()
 
index 445ddea..6bb6e89 100644 (file)
@@ -93,7 +93,15 @@ void Context::stop()
   }
 
   actor_->finished_ = true;
   }
 
   actor_->finished_ = true;
-  SIMIX_process_on_exit_runall(actor_);
+
+  // 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();
+    actor_->on_exit.pop_back();
+    (exit_fun.fun)(exit_status, exit_fun.arg);
+  }
 
   /* cancel non-blocking activities */
   for (auto activity : actor_->comms)
 
   /* cancel non-blocking activities */
   for (auto activity : actor_->comms)
index 3da85bf..9b0f19b 100644 (file)
@@ -722,17 +722,6 @@ smx_actor_t SIMIX_process_from_PID(aid_t PID)
   return actor == simix_global->process_list.end() ? nullptr : actor->second;
 }
 
   return actor == simix_global->process_list.end() ? nullptr : actor->second;
 }
 
-void SIMIX_process_on_exit_runall(smx_actor_t actor)
-{
-  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();
-    actor->on_exit.pop_back();
-    (exit_fun.fun)(exit_status, exit_fun.arg);
-  }
-}
-
 void SIMIX_process_on_exit(smx_actor_t actor, int_f_pvoid_pvoid_t fun, void* data)
 {
   SIMIX_process_on_exit(actor, [fun](int a, void* b) { fun((void*)(intptr_t)a, b); }, data);
 void SIMIX_process_on_exit(smx_actor_t actor, int_f_pvoid_pvoid_t fun, void* data)
 {
   SIMIX_process_on_exit(actor, [fun](int a, void* b) { fun((void*)(intptr_t)a, b); }, data);