X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/0213e3927d6ac21f3089d8a2d60f3603c8cbac43..5c9da7af52ab2646fc16faa39ca7c10a33020a54:/src/simix/smx_process.c diff --git a/src/simix/smx_process.c b/src/simix/smx_process.c index 0b150c8e1b..0e8d20ad83 100644 --- a/src/simix/smx_process.c +++ b/src/simix/smx_process.c @@ -214,7 +214,8 @@ void SIMIX_process_create(smx_process_t *process, */ void SIMIX_process_runall(void) { - SIMIX_context_runall(simix_global->process_to_run); + SIMIX_context_runall(); + 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; @@ -316,10 +317,17 @@ void SIMIX_pre_process_suspend(smx_req_t req) void SIMIX_process_suspend(smx_process_t process, smx_process_t issuer) { + xbt_assert((process != NULL), "Invalid parameters"); + + if (process->suspended) { + XBT_DEBUG("Process '%s' is already suspended", process->name); + return; + } + process->suspended = 1; /* If we are suspending another process, and it is waiting on an action, - suspend it's action. */ + suspend its action. */ if (process != issuer) { if (process->waiting_action) { @@ -340,7 +348,8 @@ void SIMIX_process_suspend(smx_process_t process, smx_process_t issuer) break; default: - THROW_IMPOSSIBLE; + xbt_die("Internal error in SIMIX_process_suspend: unexpected action type %d", + process->waiting_action->type); } } } @@ -350,6 +359,11 @@ void SIMIX_process_resume(smx_process_t process, smx_process_t issuer) { xbt_assert((process != NULL), "Invalid parameters"); + if (!process->suspended) { + XBT_DEBUG("Process '%s' is not suspended", process->name); + return; + } + process->suspended = 0; /* If we are resuming another process, resume the action it was waiting for @@ -374,7 +388,8 @@ void SIMIX_process_resume(smx_process_t process, smx_process_t issuer) break; default: - THROW_IMPOSSIBLE; + xbt_die("Internal error in SIMIX_process_resume: unexpected action type %d", + process->waiting_action->type); } } else { @@ -560,7 +575,7 @@ void SIMIX_process_yield(void) SIMIX_context_suspend(self->context); /* Ok, maestro returned control to us */ - XBT_DEBUG("Maestro returned control to me: '%s'", self->name); + XBT_DEBUG("Control returned to me: '%s'", self->name); if (self->context->iwannadie){ XBT_DEBUG("I wanna die!");