X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/c394d513c7c5cc4348ff885de7161f03da7a6f11..568db0c9329e157e88f25ba85c515cb9f596f03a:/src/simix/smx_synchro.c diff --git a/src/simix/smx_synchro.c b/src/simix/smx_synchro.c index 699cf8870f..74fd1f0707 100644 --- a/src/simix/smx_synchro.c +++ b/src/simix/smx_synchro.c @@ -153,9 +153,10 @@ smx_cond_t SIMIX_cond_init() */ void SIMIX_cond_signal(smx_cond_t cond) { + smx_process_t proc = NULL; DEBUG1("Signal condition %p", cond); xbt_assert0((cond != NULL), "Invalid parameters"); - smx_process_t proc = NULL; + if (xbt_swag_size(cond->sleeping) >= 1) { proc = xbt_swag_extract(cond->sleeping); @@ -181,16 +182,16 @@ void SIMIX_cond_wait(smx_cond_t cond, smx_mutex_t mutex) cond->mutex = mutex; SIMIX_mutex_unlock(mutex); - /* create an action null only if there are no actions already on the condition, usefull if the host crashs */ - if (xbt_fifo_size(cond->actions) == 0) { + /* always create an action null in case there is a host failure */ +/* if (xbt_fifo_size(cond->actions) == 0) { */ act_sleep = SIMIX_action_sleep(SIMIX_host_self(), -1); SIMIX_register_action_to_condition(act_sleep, cond); __SIMIX_cond_wait(cond); SIMIX_unregister_action_to_condition(act_sleep, cond); SIMIX_action_destroy(act_sleep); - } else { - __SIMIX_cond_wait(cond); - } +/* } else { */ +/* __SIMIX_cond_wait(cond); */ +/* } */ /* get the mutex again */ SIMIX_mutex_lock(cond->mutex); @@ -232,8 +233,9 @@ void __SIMIX_cond_wait(smx_cond_t cond) void SIMIX_cond_wait_timeout(smx_cond_t cond, smx_mutex_t mutex, double max_duration) { - xbt_assert0((mutex != NULL), "Invalid parameters"); + smx_action_t act_sleep; + xbt_assert0((mutex != NULL), "Invalid parameters"); DEBUG1("Timed wait condition %p", cond); cond->mutex = mutex; @@ -268,10 +270,11 @@ void SIMIX_cond_wait_timeout(smx_cond_t cond, smx_mutex_t mutex, */ void SIMIX_cond_broadcast(smx_cond_t cond) { - xbt_assert0((cond != NULL), "Invalid parameters"); smx_process_t proc = NULL; smx_process_t proc_next = NULL; + xbt_assert0((cond != NULL), "Invalid parameters"); + DEBUG1("Broadcast condition %p", cond); xbt_swag_foreach_safe(proc, proc_next, cond->sleeping) { xbt_swag_remove(proc, cond->sleeping);