X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/b4852fd3bb330d081de77ad7092fb2f11ee0b7a4..5bfd6df6e3880e128c78afbeff9dfc131f8c8fef:/src/simix/smx_host.c diff --git a/src/simix/smx_host.c b/src/simix/smx_host.c index 1d41473a37..2c47e5c093 100644 --- a/src/simix/smx_host.c +++ b/src/simix/smx_host.c @@ -179,12 +179,7 @@ void _SIMIX_host_free_process_arg(void *); void _SIMIX_host_free_process_arg(void *data) { smx_process_arg_t arg = *(void**)data; - int i; xbt_free(arg->name); - for (i = 0; i < arg->argc; i++) { - xbt_free(arg->argv[i]); - } - xbt_free(arg->argv); xbt_free(arg); } /** @@ -208,19 +203,20 @@ void SIMIX_host_add_auto_restart_process(smx_host_t host, host->auto_restart_processes = xbt_dynar_new(sizeof(smx_process_arg_t),_SIMIX_host_free_process_arg); } smx_process_arg_t arg = xbt_new(s_smx_process_arg_t,1); - arg->name = xbt_strdup(name); arg->code = code; arg->data = data; arg->hostname = hostname; arg->kill_time = kill_time; arg->argc = argc; + arg->argv = xbt_new(char*,argc + 1); int i; for (i = 0; i < argc; i++) { arg->argv[i] = xbt_strdup(argv[i]); } + arg->argv[argc] = NULL; arg->properties = properties; arg->auto_restart = auto_restart; @@ -289,10 +285,13 @@ void SIMIX_host_set_data(smx_host_t host, void *data) host->data = data; } -smx_action_t SIMIX_host_execute(const char *name, smx_host_t host, - double computation_amount, - double priority) +smx_action_t SIMIX_host_execute(u_smx_scalar_t args[]) { + const char *name = args[0].p; + smx_host_t host = args[1].p; + double computation_amount = args[2].d; + double priority = args[3].d; + /* alloc structures and initialize */ smx_action_t action = xbt_mallocator_get(simix_global->action_mallocator); action->type = SIMIX_ACTION_EXECUTE; @@ -305,7 +304,7 @@ smx_action_t SIMIX_host_execute(const char *name, smx_host_t host, #endif /* set surf's action */ - if (!MC_IS_ENABLED) { + if (!MC_is_active()) { action->execution.surf_exec = surf_workstation_model->extension.workstation.execute(host->host, computation_amount); @@ -343,7 +342,7 @@ smx_action_t SIMIX_host_parallel_execute( const char *name, workstation_list[i] = host_list[i]->host; /* set surf's action */ - if (!MC_IS_ENABLED) { + if (!MC_is_active()) { action->execution.surf_exec = surf_workstation_model->extension.workstation. execute_parallel_task(host_nb, workstation_list, computation_amount, @@ -358,19 +357,14 @@ smx_action_t SIMIX_host_parallel_execute( const char *name, void SIMIX_host_execution_destroy(smx_action_t action) { - int destroyed=0; XBT_DEBUG("Destroy action %p", action); - if (action->execution.surf_exec) { - destroyed = surf_workstation_model->action_unref(action->execution.surf_exec); + surf_workstation_model->action_unref(action->execution.surf_exec); action->execution.surf_exec = NULL; } - - if (destroyed) { - xbt_free(action->name); - xbt_mallocator_release(simix_global->action_mallocator, action); - } + xbt_free(action->name); + xbt_mallocator_release(simix_global->action_mallocator, action); } void SIMIX_host_execution_cancel(smx_action_t action) @@ -413,7 +407,7 @@ void SIMIX_pre_host_execution_wait(smx_simcall_t simcall) simcall->issuer->waiting_action = action; /* set surf's action */ - if (MC_IS_ENABLED) { + if (MC_is_active()) { action->state = SIMIX_DONE; SIMIX_execution_finish(action); return;