- if (process->waiting_action) {
- SIMIX_unregister_action_to_condition(process->waiting_action, process->cond);
- SIMIX_action_destroy(process->waiting_action);
+ if (process->waiting_action) {
+ SIMIX_unregister_action_to_condition(process->waiting_action,
+ process->cond);
+ SIMIX_action_destroy(process->waiting_action);
+ }
+ process->cond = NULL;
+ }
+
+ if (process->sem) {
+ xbt_fifo_remove(process->sem->sleeping, process);
+
+ if (process->waiting_action) {
+ SIMIX_unregister_action_to_semaphore(process->waiting_action,
+ process->sem);
+ SIMIX_action_destroy(process->waiting_action);
+ }
+ process->sem = NULL;