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_runall(void)
{
- SIMIX_context_runall(simix_global->process_to_run);
+ SIMIX_context_runall();
+
xbt_dynar_t tmp = simix_global->process_that_ran;
simix_global->process_that_ran = simix_global->process_to_run;
simix_global->process_to_run = tmp;
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,
- suspend it's action. */
+ suspend its action. */
if (process != issuer) {
if (process->waiting_action) {
break;
default:
- THROW_IMPOSSIBLE;
+ xbt_die("Internal error in SIMIX_process_suspend: unexpected action type %d",
+ process->waiting_action->type);
}
}
}
{
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
break;
default:
- THROW_IMPOSSIBLE;
+ xbt_die("Internal error in SIMIX_process_resume: unexpected action type %d",
+ process->waiting_action->type);
}
}
else {
SIMIX_context_suspend(self->context);
/* Ok, maestro returned control to us */
- XBT_DEBUG("Maestro returned control to me: '%s'", self->name);
+ XBT_DEBUG("Control returned to me: '%s'", self->name);
if (self->context->iwannadie){
XBT_DEBUG("I wanna die!");