From 68569408149f1d2cd89af49248dc64ba673ebad2 Mon Sep 17 00:00:00 2001 From: Martin Quinson Date: Sun, 4 Nov 2018 05:04:55 +0100 Subject: [PATCH] simplify MSG process creation/destruction Use a proper callback to cleanup things, and somehow, we don't need anything special anymore when creating a MSG process, so stop making things complicated for no reason. --- src/msg/msg_global.cpp | 13 +++++++++---- src/msg/msg_private.hpp | 5 ----- src/msg/msg_process.cpp | 23 ----------------------- 3 files changed, 9 insertions(+), 32 deletions(-) diff --git a/src/msg/msg_global.cpp b/src/msg/msg_global.cpp index 22dfa7ca65..d6cb7f8e98 100644 --- a/src/msg/msg_global.cpp +++ b/src/msg/msg_global.cpp @@ -3,12 +3,12 @@ /* 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_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()){ diff --git a/src/msg/msg_private.hpp b/src/msg/msg_private.hpp index d65129c89e..e572623a35 100644 --- a/src/msg/msg_private.hpp +++ b/src/msg/msg_private.hpp @@ -78,11 +78,6 @@ typedef s_MSG_Global_t* MSG_Global_t; XBT_PUBLIC_DATA MSG_Global_t msg_global; /*************************************************************/ -XBT_PRIVATE void MSG_process_cleanup_from_SIMIX(smx_actor_t smx_proc); -XBT_PRIVATE smx_actor_t MSG_process_create_from_SIMIX(std::string name, simgrid::simix::ActorCode code, void* data, - sg_host_t host, - std::unordered_map* properties, - smx_actor_t parent_process); XBT_PRIVATE void MSG_comm_copy_data_from_SIMIX(smx_activity_t comm, void* buff, size_t buff_size); /********** Tracing **********/ diff --git a/src/msg/msg_process.cpp b/src/msg/msg_process.cpp index e7c6961eee..7f00a859ee 100644 --- a/src/msg/msg_process.cpp +++ b/src/msg/msg_process.cpp @@ -17,29 +17,6 @@ std::string instr_pid(msg_process_t proc) } /******************************** Process ************************************/ -/** - * @brief Cleans the MSG data of an actor - * @param smx_actor a SIMIX actor - */ -void MSG_process_cleanup_from_SIMIX(smx_actor_t smx_actor) -{ - // free the data if a function was provided - void* userdata = smx_actor->get_user_data(); - if (userdata && msg_global->process_data_cleanup) { - msg_global->process_data_cleanup(userdata); - } - - SIMIX_process_cleanup(smx_actor); -} - -/* This function creates a MSG process. It has the prototype enforced by SIMIX_function_register_process_create */ -smx_actor_t MSG_process_create_from_SIMIX(std::string name, simgrid::simix::ActorCode code, void* data, sg_host_t host, - std::unordered_map* properties, - smx_actor_t /*parent_process*/) -{ - msg_process_t p = MSG_process_create_from_stdfunc(name, std::move(code), data, host, properties); - return p == nullptr ? nullptr : p->get_impl(); -} /** @brief Creates and runs a new #msg_process_t. * -- 2.20.1