Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
and now, a correct implementation of this_actor::isMaestro()
authorMartin Quinson <martin.quinson@loria.fr>
Sun, 18 Jun 2017 20:42:52 +0000 (22:42 +0200)
committerMartin Quinson <martin.quinson@loria.fr>
Sun, 18 Jun 2017 20:42:52 +0000 (22:42 +0200)
src/s4u/s4u_actor.cpp
src/simix/smx_private.h

index 7b6e968..ab6f3a1 100644 (file)
@@ -11,6 +11,8 @@
 #include "simgrid/s4u/Mailbox.hpp"
 
 #include "src/kernel/context/Context.hpp"
+#include "src/simix/smx_private.h"
+
 #include <sstream>
 
 XBT_LOG_NEW_DEFAULT_CATEGORY(s4u_actor, "S4U actors");
@@ -179,8 +181,8 @@ namespace this_actor {
  */
 bool isMaestro()
 {
-  smx_context_t self_context = SIMIX_context_self();
-  return self_context == nullptr;
+  smx_actor_t process = SIMIX_process_self();
+  return process == nullptr || process == simix_global->maestro_process;
 }
 
 void sleep_for(double duration)
index 602dfdf..85d9107 100644 (file)
@@ -6,8 +6,9 @@
 #ifndef SIMIX_PRIVATE_H
 #define SIMIX_PRIVATE_H
 
-#include <signal.h>
+#include "simgrid/s4u/Actor.hpp"
 #include "src/kernel/context/Context.hpp"
+#include <signal.h>
 
 #include <map>
 
@@ -17,6 +18,8 @@ namespace simgrid {
 namespace simix {
 
 class Global {
+  friend bool simgrid::s4u::this_actor::isMaestro();
+
 public:
   smx_context_factory_t context_factory = nullptr;
   xbt_dynar_t process_to_run = nullptr;