From d1673ac73027bea0d221b03568585a5b2ce6d04f Mon Sep 17 00:00:00 2001 From: Millian Poquet Date: Thu, 7 Jan 2016 19:14:08 +0100 Subject: [PATCH] In MSG_process_create_with_environment, inversion of the SIMIX process creation and the TRACE process creation --- src/msg/msg_process.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/msg/msg_process.cpp b/src/msg/msg_process.cpp index 2791dcbf1b..b2abbfb9db 100644 --- a/src/msg/msg_process.cpp +++ b/src/msg/msg_process.cpp @@ -8,6 +8,7 @@ #include "xbt/sysdep.h" #include "xbt/log.h" #include "src/simix/smx_process_private.h" +#include "src/simix/smx_private.h" XBT_LOG_NEW_DEFAULT_SUBCATEGORY(msg_process, msg, "Logging specific to MSG (process)"); @@ -164,19 +165,25 @@ msg_process_t MSG_process_create_with_environment(const char *name, simdata->data = data; simdata->last_errno = MSG_OK; + /* The TRACE process is created before the SIMIX one + * to avoid issues when SIMIX decides to start the new + * process right now (before returning the flow control). */ + int next_pid = SIMIX_process_get_maxpid(); + TRACE_msg_process_create(name, next_pid, host); + /* Let's create the process: SIMIX may decide to start it right now, * even before returning the flow control to us */ process = simcall_process_create(name, code, simdata, sg_host_get_name(host), -1, argc, argv, properties,0); - TRACE_msg_process_create(name, SIMIX_process_get_PID(process), host); - if (!process) { /* Undo everything we have just changed */ xbt_free(simdata); return NULL; + // FIXME: is the TRACE process destroyed in this case? } else { + xbt_assert(next_pid == process->pid, "Bad trace pid hack"); simcall_process_on_exit(process,(int_f_pvoid_pvoid_t)TRACE_msg_process_kill,process); } return process; -- 2.20.1