action->comm.dst_proc = NULL;
}
else {
+ XBT_DEBUG("Strange, I'm not in comm %p, state = %d, src = %p, dst = %p", action,
+ action->state, action->comm.src_proc, action->comm.dst_proc);
THROW_IMPOSSIBLE;
}
- SIMIX_comm_destroy(action);
+ /* FIXME uncommenting this instruction crashes complex simulations
+ SIMIX_comm_destroy(action); */
}
/*xbt_swag_remove(process, simix_global->process_to_run);*/
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,
{
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