Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
The creation of the pimpl needs no simcall
[simgrid.git] / src / msg / msg_global.cpp
index 06c261a..ede87a5 100644 (file)
@@ -1,14 +1,14 @@
-/* Copyright (c) 2004-2018. The SimGrid Team. All rights reserved.          */
+/* Copyright (c) 2004-2019. The SimGrid Team. All rights reserved.          */
 
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
+#include "mc/mc.h"
 #include "simgrid/s4u/Engine.hpp"
 #include "simgrid/s4u/Host.hpp"
-
-#include "mc/mc.h"
 #include "src/instr/instr_private.hpp"
 #include "src/msg/msg_private.hpp"
+#include "src/simix/smx_private.hpp"
 #include <xbt/config.hpp>
 
 XBT_LOG_NEW_CATEGORY(msg, "All MSG categories");
@@ -42,8 +42,13 @@ void MSG_init_nocheck(int *argc, char **argv) {
     msg_global->task_copy_callback = nullptr;
     msg_global->process_data_cleanup = nullptr;
 
-    SIMIX_function_register_process_create(MSG_process_create_from_SIMIX);
-    SIMIX_function_register_process_cleanup(MSG_process_cleanup_from_SIMIX);
+    simgrid::s4u::Actor::on_destruction.connect([](simgrid::s4u::ActorPtr actor) {
+      // free the data if a function was provided
+      void* userdata = actor->get_impl()->get_user_data();
+      if (userdata && msg_global->process_data_cleanup) {
+        msg_global->process_data_cleanup(userdata);
+      }
+    });
   }
 
   if(MC_is_active()){
@@ -55,15 +60,6 @@ void MSG_init_nocheck(int *argc, char **argv) {
     atexit(MSG_exit);
 }
 
-/** @ingroup msg_simulation
- * @brief set a configuration variable
- *
- * Do --help on any simgrid binary to see the list of currently existing configuration variables, and see Section @ref
- * options.
- *
- * Example:
- * MSG_config("host/model","ptask_L07");
- */
 void MSG_config(const char *key, const char *value){
   xbt_assert(msg_global,"ERROR: Please call MSG_init() before using MSG_config()");
   simgrid::config::set_as_string(key, value);