From a1e64d5519d2e9304830d0b82a7988c8970db692 Mon Sep 17 00:00:00 2001 From: Arnaud Giersch Date: Tue, 10 May 2011 08:14:56 +0200 Subject: [PATCH] Define and use a function to run the processes to run. --- src/mc/mc_global.c | 7 +------ src/simix/process_private.h | 1 + src/simix/smx_global.c | 6 +----- src/simix/smx_process.c | 18 ++++++++++++++++++ 4 files changed, 21 insertions(+), 11 deletions(-) diff --git a/src/mc/mc_global.c b/src/mc/mc_global.c index 9fcb58c087..1142da7c2a 100644 --- a/src/mc/mc_global.c +++ b/src/mc/mc_global.c @@ -81,12 +81,7 @@ void MC_wait_for_requests(void) unsigned int iter; while (xbt_dynar_length(simix_global->process_to_run)) { - SIMIX_context_runall(simix_global->process_to_run); - - xbt_dynar_t tmp = simix_global->process_that_ran; - simix_global->process_that_ran = simix_global->process_to_run; - simix_global->process_to_run = tmp; - xbt_dynar_reset(simix_global->process_to_run); + SIMIX_process_runall(); xbt_dynar_foreach(simix_global->process_that_ran, iter, process) { req = &process->request; if (req->call != REQ_NO_REQ && !MC_request_is_visible(req)) diff --git a/src/simix/process_private.h b/src/simix/process_private.h index 8df718cf89..93b294d22d 100644 --- a/src/simix/process_private.h +++ b/src/simix/process_private.h @@ -53,6 +53,7 @@ void SIMIX_process_create(smx_process_t *process, const char *hostname, int argc, char **argv, xbt_dict_t properties); +void SIMIX_process_runall(void); void SIMIX_process_kill(smx_process_t process); void SIMIX_process_killall(smx_process_t issuer); smx_process_t SIMIX_process_create_from_wrapper(smx_process_arg_t args); diff --git a/src/simix/smx_global.c b/src/simix/smx_global.c index 89fec34029..b4de7e8266 100644 --- a/src/simix/smx_global.c +++ b/src/simix/smx_global.c @@ -200,11 +200,7 @@ void SIMIX_run(void) while (xbt_dynar_length(simix_global->process_to_run)) { XBT_DEBUG("New Sub-Schedule Round; size(queue)=%lu", xbt_dynar_length(simix_global->process_to_run)); - SIMIX_context_runall(simix_global->process_to_run); - xbt_dynar_t tmp = simix_global->process_that_ran; - simix_global->process_that_ran = simix_global->process_to_run; - simix_global->process_to_run = tmp; - xbt_dynar_reset(simix_global->process_to_run); + SIMIX_process_runall(); xbt_dynar_foreach(simix_global->process_that_ran, iter, process) { if (process->request.call != REQ_NO_REQ) { XBT_DEBUG("Handling request %p", &process->request); diff --git a/src/simix/smx_process.c b/src/simix/smx_process.c index 3296198782..2713127822 100644 --- a/src/simix/smx_process.c +++ b/src/simix/smx_process.c @@ -166,6 +166,24 @@ void SIMIX_process_create(smx_process_t *process, } } +/** + * \brief Executes the processes from simix_global->process_to_run. + * + * The processes of simix_global->process_to_run are run (in parallel if + * possible). On exit, simix_global->process_to_run is empty, and + * simix_global->process_that_ran contains the list of processes that just ran. + * The two lists are swapped so, be careful when using them before and after a + * call to this function. + */ +void SIMIX_process_runall(void) +{ + SIMIX_context_runall(simix_global->process_to_run); + xbt_dynar_t tmp = simix_global->process_that_ran; + simix_global->process_that_ran = simix_global->process_to_run; + simix_global->process_to_run = tmp; + xbt_dynar_reset(simix_global->process_to_run); +} + /** * \brief Internal function to kill a SIMIX process. * -- 2.20.1