X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/2ddd4202532d54d217533b97ffde98f1ab078a11..651068fba96141ffc78b9da231fb6b7914f3e82b:/src/simix/smx_process.c diff --git a/src/simix/smx_process.c b/src/simix/smx_process.c index 80fac61320..f6e37a70ab 100644 --- a/src/simix/smx_process.c +++ b/src/simix/smx_process.c @@ -14,11 +14,9 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_process, simix, "Logging specific to SIMIX (process)"); -/******************************** Process ************************************/ /** * \brief Move a process to the list of process to destroy. * */ - void SIMIX_process_cleanup(void *arg) { xbt_swag_remove(arg, simix_global->process_to_run); @@ -36,27 +34,17 @@ void SIMIX_process_cleanup(void *arg) void SIMIX_process_empty_trash(void) { smx_process_t process = NULL; - int i; while ((process = xbt_swag_extract(simix_global->process_to_destroy))){ + SIMIX_context_free(process->context); free(process->name); process->name = NULL; - - if (process->argv) { - for (i = 0; i < process->argc; i++) - if (process->argv[i]) - free(process->argv[i]); - - free(process->argv); - } - free(process); } } /** * \brief Creates and runs the maestro process - * */ void __SIMIX_create_maestro_process() { @@ -66,8 +54,8 @@ void __SIMIX_create_maestro_process() /* Process data */ process->name = (char *)""; - /* Create the right context type */ - process->context = SIMIX_context_create_maestro(); + /* Create a dummy context for maestro */ + process->context = SIMIX_context_new(NULL, 0, NULL, NULL, NULL); /* Set it as the maestro process */ simix_global->maestro_process = process; @@ -111,18 +99,16 @@ smx_process_t SIMIX_process_create(const char *name, /* Process data */ process->name = xbt_strdup(name); process->smx_host = host; - process->argc = argc; - process->argv = argv; process->mutex = NULL; process->cond = NULL; process->iwannadie = 0; VERB1("Create context %s", process->name); - process->context = SIMIX_context_new(code); + process->context = SIMIX_context_new(code, argc, argv, + simix_global->cleanup_process_function, + process); process->data = data; - process->cleanup_func = simix_global->cleanup_process_function; - process->cleanup_arg = process; /* Add properties */ process->properties = properties; @@ -174,11 +160,12 @@ void SIMIX_jprocess_create(const char *name, smx_host_t host, /* Process data */ process->name = xbt_strdup(name); process->smx_host = host; - process->argc = 0; - process->argv = NULL; process->mutex = NULL; process->cond = NULL; - SIMIX_context_new(jprocess); + process->context = SIMIX_context_new(jprocess, 0, NULL, + simix_global->cleanup_process_function, + process); + process->data = data; /* Add the process to it's host process list */ @@ -218,7 +205,7 @@ void SIMIX_process_kill(smx_process_t process) /* If I'm killing myself then stop otherwise schedule the process to kill */ if (process == SIMIX_process_self()) - SIMIX_context_stop(1); + SIMIX_context_stop(process->context); else __SIMIX_process_schedule(process); @@ -457,7 +444,7 @@ void __SIMIX_process_yield(void) SIMIX_context_suspend(simix_global->current_process->context); if (simix_global->current_process->iwannadie) - SIMIX_context_stop(1); + SIMIX_context_stop(simix_global->current_process->context); } void __SIMIX_process_schedule(smx_process_t new_process)