From: alegrand Date: Sat, 6 Jun 2009 13:44:10 +0000 (+0000) Subject: Take into account that some process may actually not be launched because the host... X-Git-Tag: SVN~1327 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/09ced2bb0f994a2794e379b7ab0830921ae867e1?hp=3290913dede085dd2e29b466a1e0d132d4eb2942 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 --- 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);