Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[SIMIX] Fix the ActorImpl signal
authorChristian Heinrich <franz-christian.heinrich@inria.fr>
Fri, 12 Jan 2018 13:48:11 +0000 (14:48 +0100)
committerChristian Heinrich <franz-christian.heinrich@inria.fr>
Mon, 15 Jan 2018 16:15:37 +0000 (17:15 +0100)
The signal was fired too early, so I moved it to
another position.

src/simix/ActorImpl.cpp

index fcc6dac..f04292c 100644 (file)
@@ -314,8 +314,6 @@ smx_actor_t SIMIX_process_create(const char* name, std::function<void()> code, v
   }
 
   smx_actor_t process = new simgrid::simix::ActorImpl();
-  simgrid::s4u::ActorPtr tmp = process->iface(); // Passing this directly to onCreation will lead to crashes
-  simgrid::s4u::Actor::onCreation(tmp);
 
   xbt_assert(code && host != nullptr, "Invalid parameters");
   /* Process data */
@@ -366,6 +364,12 @@ smx_actor_t SIMIX_process_create(const char* name, std::function<void()> code, v
 
   /* Tracing the process creation */
   TRACE_msg_process_create(process->getName(), process->pid, process->host);
+  /* Note by cheinrich: If you move this directly after the "new ActorImpl", the pid
+   * will not yet be set and you will cause issues when other code relies on that.
+   * This is of course also true for the other properties, so I moved this here.
+   */
+  simgrid::s4u::ActorPtr tmp = process->iface(); // Passing this directly to onCreation will lead to crashes
+  simgrid::s4u::Actor::onCreation(tmp);
 
   return process;
 }