Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
enable user data extension without calling MSG_init
authorFrederic Suter <frederic.suter@cc.in2p3.fr>
Fri, 29 Mar 2019 16:38:25 +0000 (17:38 +0100)
committerFrederic Suter <frederic.suter@cc.in2p3.fr>
Fri, 29 Mar 2019 16:38:25 +0000 (17:38 +0100)
include/simgrid/msg.h
src/msg/msg_global.cpp
src/msg/msg_process.cpp

index 821228b..d9d09d0 100644 (file)
@@ -308,6 +308,7 @@ XBT_PUBLIC double MSG_get_clock();
 XBT_PUBLIC unsigned long int MSG_get_sent_msg();
 
 /************************** Process handling *********************************/
 XBT_PUBLIC unsigned long int MSG_get_sent_msg();
 
 /************************** Process handling *********************************/
+XBT_PUBLIC void MSG_process_userdata_init();
 XBT_PUBLIC msg_process_t MSG_process_create(const char* name, xbt_main_func_t code, void* data, msg_host_t host);
 XBT_PUBLIC msg_process_t MSG_process_create_with_arguments(const char* name, xbt_main_func_t code, void* data,
                                                            msg_host_t host, int argc, char** argv);
 XBT_PUBLIC msg_process_t MSG_process_create(const char* name, xbt_main_func_t code, void* data, msg_host_t host);
 XBT_PUBLIC msg_process_t MSG_process_create_with_arguments(const char* name, xbt_main_func_t code, void* data,
                                                            msg_host_t host, int argc, char** argv);
index 5b6713b..8c6365c 100644 (file)
@@ -39,25 +39,11 @@ void MSG_init_nocheck(int *argc, char **argv) {
     SIMIX_global_init(argc, argv);
 
     msg_global = new MSG_Global_t();
     SIMIX_global_init(argc, argv);
 
     msg_global = new MSG_Global_t();
-    if (not simgrid::msg::ActorUserData::EXTENSION_ID.valid())
-      simgrid::msg::ActorUserData::EXTENSION_ID = simgrid::s4u::Actor::extension_create<simgrid::msg::ActorUserData>();
 
     msg_global->sent_msg = 0;
     msg_global->task_copy_callback = nullptr;
     msg_global->process_data_cleanup = nullptr;
 
     msg_global->sent_msg = 0;
     msg_global->task_copy_callback = nullptr;
     msg_global->process_data_cleanup = nullptr;
-
-    simgrid::s4u::Actor::on_creation.connect([](simgrid::s4u::Actor& actor) {
-      XBT_DEBUG("creating the extension to store user data");
-      actor.extension_set(new simgrid::msg::ActorUserData());
-    });
-
-    simgrid::s4u::Actor::on_destruction.connect([](simgrid::s4u::Actor const& actor) {
-      // free the data if a function was provided
-      void* userdata = actor.extension<simgrid::msg::ActorUserData>()->get_user_data();
-      if (userdata && msg_global->process_data_cleanup) {
-        msg_global->process_data_cleanup(userdata);
-      }
-    });
+    MSG_process_userdata_init();
   }
 
   if(MC_is_active()){
   }
 
   if(MC_is_active()){
index e588143..1d6bb19 100644 (file)
@@ -16,6 +16,27 @@ std::string instr_pid(simgrid::s4u::Actor const& proc)
   return std::string(proc.get_name()) + "-" + std::to_string(proc.get_pid());
 }
 
   return std::string(proc.get_name()) + "-" + std::to_string(proc.get_pid());
 }
 
+void MSG_process_userdata_init()
+{
+  if (not msg_global)
+    msg_global = new MSG_Global_t();
+
+  if (not simgrid::msg::ActorUserData::EXTENSION_ID.valid())
+    simgrid::msg::ActorUserData::EXTENSION_ID = simgrid::s4u::Actor::extension_create<simgrid::msg::ActorUserData>();
+  simgrid::s4u::Actor::on_creation.connect([](simgrid::s4u::Actor& actor) {
+    XBT_DEBUG("creating the extension to store user data");
+    actor.extension_set(new simgrid::msg::ActorUserData());
+  });
+
+  simgrid::s4u::Actor::on_destruction.connect([](simgrid::s4u::Actor const& actor) {
+    // free the data if a function was provided
+    void* userdata = actor.extension<simgrid::msg::ActorUserData>()->get_user_data();
+    if (userdata && msg_global->process_data_cleanup) {
+      msg_global->process_data_cleanup(userdata);
+    }
+  });
+}
+
 /******************************** Process ************************************/
 /** @brief Creates and runs a new #msg_process_t.
  *
 /******************************** Process ************************************/
 /** @brief Creates and runs a new #msg_process_t.
  *