if (process->kill_timer != NULL)
SIMIX_timer_remove(process->kill_timer);
+ xbt_os_mutex_acquire(simix_global->mutex);
+
/* cancel non-blocking communications */
smx_synchro_t synchro;
while ((synchro = xbt_fifo_pop(process->comms))) {
xbt_swag_remove(process, SIMIX_host_priv(process->smx_host)->process_list);
xbt_swag_insert(process, simix_global->process_to_destroy);
process->context->iwannadie = 0;
+
+ xbt_os_mutex_release(simix_global->mutex);
}
/**
case SIMIX_SYNC_COMMUNICATE:
xbt_fifo_remove(process->comms, process->waiting_synchro);
SIMIX_comm_cancel(process->waiting_synchro);
+ xbt_fifo_remove(process->waiting_synchro->simcalls, &process->simcall);
SIMIX_comm_destroy(process->waiting_synchro);
break;
break;
}
+
+ process->waiting_synchro = NULL;
}
if(!xbt_dynar_member(simix_global->process_to_run, &(process)) && process != issuer) {
XBT_DEBUG("Inserting %s in the to_run list", process->name);