#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)");
simcall_process_set_data(smx_proc, NULL);
}
- TRACE_msg_process_end(smx_proc);
+ TRACE_msg_process_destroy(smx_proc->name, smx_proc->pid);
// free the data if a function was provided
if (msg_proc && msg_proc->data && msg_global->process_data_cleanup) {
msg_global->process_data_cleanup(msg_proc->data);
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). */
+ unsigned 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,
+ 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;