X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/dff9e15c44ab6340d27215957c56fa72fad246a2..e487ef4538248f261ddb6e814357593df7646e33:/src/msg/m_process.c diff --git a/src/msg/m_process.c b/src/msg/m_process.c index 7664a192c5..68779a4e2f 100644 --- a/src/msg/m_process.c +++ b/src/msg/m_process.c @@ -136,19 +136,28 @@ m_process_t MSG_process_create_with_environment(const char *name, int argc, char **argv, xbt_dict_t properties) { - simdata_process_t simdata = xbt_new0(s_simdata_process_t, 1); + simdata_process_t simdata = NULL; m_process_t process = xbt_new0(s_m_process_t, 1); + smx_process_t smx_process = NULL; xbt_assert0(((code != NULL) && (host != NULL)), "Invalid parameters"); + smx_process = SIMIX_process_create(name, code, + (void *) process, host->name, + argc, argv, properties); + if (!smx_process) { + xbt_free(process); + return NULL; + } + + simdata = xbt_new0(s_simdata_process_t, 1); + /* Simulator Data */ simdata->PID = msg_global->PID++; - simdata->waiting_task = NULL; + simdata->waiting_action = NULL; simdata->m_host = host; simdata->argc = argc; simdata->argv = argv; - simdata->s_process = SIMIX_process_create(name, code, - (void *) process, host->name, - argc, argv, properties); + simdata->s_process = smx_process; if (SIMIX_process_self()) { simdata->PPID = MSG_process_get_PID(SIMIX_process_self()->data); @@ -186,13 +195,10 @@ void MSG_process_kill(m_process_t process) DEBUG3("Killing %s(%d) on %s", process->name, p_simdata->PID, p_simdata->m_host->name); - if (p_simdata->waiting_task) { - DEBUG1("Canceling waiting task %s", p_simdata->waiting_task->name); - if (p_simdata->waiting_task->simdata->compute) { - SIMIX_action_cancel(p_simdata->waiting_task->simdata->compute); - } else if (p_simdata->waiting_task->simdata->comm) { - SIMIX_action_cancel(p_simdata->waiting_task->simdata->comm); - } + if (p_simdata->waiting_action) { + DEBUG1("Canceling waiting task %s", + SIMIX_action_get_name(p_simdata->waiting_action)); + SIMIX_action_cancel(p_simdata->waiting_action); } xbt_fifo_remove(msg_global->process_list, process);