Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
simplify the actor finalization a tiny bit by using a callback
authorMartin Quinson <martin.quinson@loria.fr>
Wed, 29 Aug 2018 20:04:11 +0000 (22:04 +0200)
committerMartin Quinson <martin.quinson@loria.fr>
Wed, 29 Aug 2018 20:04:14 +0000 (22:04 +0200)
This is part of the removal of all trace-related pimpl all over the
code of MSG (my goal is to kill MSG_process_cleanup_from_SIMIX() all
together).

Note that I changed from Container::by_name() to
Container::by_name_or_null. It seems that not all actors have a
container by their name, not sure why.

src/instr/instr_paje_containers.cpp
src/instr/instr_platform.cpp
src/msg/msg_process.cpp

index 52994b4..e0c22b1 100644 (file)
@@ -129,8 +129,7 @@ Container* Container::by_name_or_null(std::string name)
 Container* Container::by_name(std::string name)
 {
   Container* ret = Container::by_name_or_null(name);
 Container* Container::by_name(std::string name)
 {
   Container* ret = Container::by_name_or_null(name);
-  if (ret == nullptr)
-    THROWF(tracing_error, 1, "container with name %s not found", name.c_str());
+  xbt_assert(ret != nullptr, "container with name %s not found", name.c_str());
 
   return ret;
 }
 
   return ret;
 }
index 1901f25..5ec364e 100644 (file)
@@ -372,6 +372,11 @@ void instr_define_callbacks()
 
   if (TRACE_actor_is_enabled()) {
     simgrid::s4u::Actor::on_creation.connect(instr_actor_on_creation);
 
   if (TRACE_actor_is_enabled()) {
     simgrid::s4u::Actor::on_creation.connect(instr_actor_on_creation);
+    simgrid::s4u::Actor::on_destruction.connect([](simgrid::s4u::ActorPtr actor) {
+      auto container = simgrid::instr::Container::by_name_or_null(instr_pid(actor.get()));
+      if (container != nullptr)
+        container->remove_from_parent();
+    });
     simgrid::s4u::Actor::on_suspend.connect([](simgrid::s4u::ActorPtr actor) {
       simgrid::instr::Container::by_name(instr_pid(actor.get()))->get_state("ACTOR_STATE")->push_event("suspend");
     });
     simgrid::s4u::Actor::on_suspend.connect([](simgrid::s4u::ActorPtr actor) {
       simgrid::instr::Container::by_name(instr_pid(actor.get()))->get_state("ACTOR_STATE")->push_event("suspend");
     });
index 16311de..590bd24 100644 (file)
@@ -32,9 +32,6 @@ std::string instr_pid(msg_process_t proc)
  */
 void MSG_process_cleanup_from_SIMIX(smx_actor_t smx_actor)
 {
  */
 void MSG_process_cleanup_from_SIMIX(smx_actor_t smx_actor)
 {
-  if (TRACE_actor_is_enabled())
-    simgrid::instr::Container::by_name(instr_pid(smx_actor->ciface()))->remove_from_parent();
-
   // free the data if a function was provided
   void* userdata = smx_actor->get_user_data();
   if (userdata && msg_global->process_data_cleanup) {
   // free the data if a function was provided
   void* userdata = smx_actor->get_user_data();
   if (userdata && msg_global->process_data_cleanup) {