From 09ced2bb0f994a2794e379b7ab0830921ae867e1 Mon Sep 17 00:00:00 2001 From: alegrand Date: Sat, 6 Jun 2009 13:44:10 +0000 Subject: [PATCH] Take into account that some process may actually not be launched because the host on which they were supposed to run was turned off. git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@6313 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- src/msg/m_process.c | 17 +++++++++++++---- src/simix/smx_deployment.c | 8 ++++---- src/simix/smx_global.c | 2 +- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/msg/m_process.c b/src/msg/m_process.c index 7664a192c5..5dea7eadb3 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->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); diff --git a/src/simix/smx_deployment.c b/src/simix/smx_deployment.c index 41d777fe67..d1cae1289b 100644 --- a/src/simix/smx_deployment.c +++ b/src/simix/smx_deployment.c @@ -88,11 +88,11 @@ static void parse_process_finalize(void) process = SIMIX_process_create(parse_argv[0], parse_code, NULL, parse_host, parse_argc, parse_argv, /*the props */ current_property_set); - if (kill_time > SIMIX_get_clock()) { + if (process && kill_time > SIMIX_get_clock()) { if (simix_global->kill_process_function) - surf_timer_model->extension_public->set(start_time, (void *) - simix_global->kill_process_function, - arg); + surf_timer_model->extension_public->set(start_time, (void *) + simix_global->kill_process_function, + process); else surf_timer_model->extension_public->set(kill_time, (void *) &SIMIX_process_kill, diff --git a/src/simix/smx_global.c b/src/simix/smx_global.c index 72126a7669..c7185685ce 100644 --- a/src/simix/smx_global.c +++ b/src/simix/smx_global.c @@ -387,7 +387,7 @@ double SIMIX_solve(xbt_fifo_t actions_done, xbt_fifo_t actions_failed) args->data, args->hostname, args->argc, args->argv, args->properties); - if (args->kill_time > SIMIX_get_clock()) { + if (process && args->kill_time > SIMIX_get_clock()) { surf_timer_model->extension_public->set(args->kill_time, (void *) &SIMIX_process_kill, (void *) process); -- 2.20.1