From: Martin Quinson Date: Tue, 14 Jul 2015 19:55:18 +0000 (+0200) Subject: Merge branch 'master' of github.com:mquinson/simgrid X-Git-Tag: v3_12~524 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/14dcc36f158833d880504001fa1aa67e51db822a?hp=e76ef17ba2a7db2ab8a3b921995823af5abd8882 Merge branch 'master' of github.com:mquinson/simgrid --- diff --git a/src/msg/instr_msg_process.c b/src/msg/instr_msg_process.c index c2307ca7c7..cc1bd8e589 100644 --- a/src/msg/instr_msg_process.c +++ b/src/msg/instr_msg_process.c @@ -68,9 +68,12 @@ void TRACE_msg_process_destroy (const char *process_name, int process_pid, msg_h int len = INSTR_DEFAULT_STR_SIZE; char str[INSTR_DEFAULT_STR_SIZE]; - container_t process = PJ_container_get (instr_process_id_2 (process_name, process_pid, str, len)); - PJ_container_remove_from_parent (process); - PJ_container_free (process); + // Avoids multiple destroys of the same process + container_t process = PJ_container_get_or_null (instr_process_id_2 (process_name, process_pid, str, len)); + if (process){ + PJ_container_remove_from_parent (process); + PJ_container_free (process); + } } void TRACE_msg_process_kill(smx_process_exit_status_t status, msg_process_t process) @@ -134,12 +137,7 @@ void TRACE_msg_process_sleep_out(msg_process_t process) void TRACE_msg_process_end(msg_process_t process) { if (TRACE_msg_process_is_enabled()) { - int len = INSTR_DEFAULT_STR_SIZE; - char str[INSTR_DEFAULT_STR_SIZE]; - //that's the end, let's destroy it - container_t container = PJ_container_get (instr_process_id(process, str, len)); - PJ_container_remove_from_parent (container); - PJ_container_free (container); + TRACE_msg_process_destroy(MSG_process_get_name (process), MSG_process_get_PID (process), MSG_process_get_host (process)); } } diff --git a/src/msg/msg_process.c b/src/msg/msg_process.c index 44d3838ad8..419e710c35 100644 --- a/src/msg/msg_process.c +++ b/src/msg/msg_process.c @@ -164,12 +164,14 @@ msg_process_t MSG_process_create_with_environment(const char *name, simdata->data = data; simdata->last_errno = MSG_OK; + int future_simix_process_pid = SIMIX_process_get_maxpid(); + TRACE_msg_process_create(name, future_simix_process_pid, host); + /* Let's create the process: SIMIX may decide to start it right now, * even before returning the flow control to us */ - simcall_process_create(&process, name, code, simdata, sg_host_name(host), -1, + simcall_process_create(&process, name, code, simdata, sg_host_name(host), -1, argc, argv, properties,0); - - TRACE_msg_process_create(name, SIMIX_process_get_PID(process), host); + xbt_assert(future_simix_process_pid == SIMIX_process_get_PID(process)); if (!process) { /* Undo everything we have just changed */