- SIMIX_mutex_unlock(mutex);
- /* 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); */
-/* } */
- /* get the mutex again */
- SIMIX_mutex_lock(cond->mutex);
+ /* If there is a mutex unlock it */
+ if(mutex != NULL){
+ cond->mutex = mutex;
+ SIMIX_mutex_unlock(mutex);
+ }
+
+ /* Always create an action null in case there is a host failure */
+ act_sleep = SIMIX_action_sleep(SIMIX_host_self(), -1);
+ SIMIX_process_self()->waiting_action = act_sleep;
+ SIMIX_register_action_to_condition(act_sleep, cond);
+ __SIMIX_cond_wait(cond);
+ SIMIX_process_self()->waiting_action = NULL;
+ SIMIX_unregister_action_to_condition(act_sleep, cond);
+ SIMIX_action_destroy(act_sleep);
+
+ /* get the mutex again if necessary */
+ if(mutex != NULL)
+ SIMIX_mutex_lock(cond->mutex);