SIMIX_simcall_handle(&process->simcall, 0);
}
}
+ /* Wake up all processes waiting for a Surf action to finish */
+ xbt_dynar_foreach(model_list, iter, model) {
+ XBT_DEBUG("Handling process whose action failed");
+ while ((action = surf_model_extract_failed_action_set(model))) {
+ XBT_DEBUG(" Handling Action %p",action);
+ SIMIX_simcall_exit((smx_synchro_t) surf_action_get_data(action));
+ }
+ XBT_DEBUG("Handling process whose action terminated normally");
+ while ((action = surf_model_extract_done_action_set(model))) {
+ XBT_DEBUG(" Handling Action %p",action);
+ if (surf_action_get_data(action) == NULL)
+ XBT_DEBUG("probably vcpu's action %p, skip", action);
+ else
+ SIMIX_simcall_exit((smx_synchro_t) surf_action_get_data(action));
+ }
+ }
}
time = SIMIX_timer_next();
break;
case SIMIX_SYNC_SLEEP:
- SIMIX_process_sleep_destroy(process->waiting_synchro);
- break;
-
case SIMIX_SYNC_JOIN:
SIMIX_process_sleep_destroy(process->waiting_synchro);
+ if (!xbt_dynar_member(simix_global->process_to_run, &(process)) && process != SIMIX_process_self()) {
+ XBT_DEBUG("Inserting %s in the to_run list", process->name);
+ xbt_dynar_push_as(simix_global->process_to_run, smx_process_t, process);
+ }
break;
case SIMIX_SYNC_SYNCHRO:
}
process->waiting_synchro = NULL;
- if (!xbt_dynar_member(simix_global->process_to_run, &(process)) && process != SIMIX_process_self())
- xbt_dynar_push_as(simix_global->process_to_run, smx_process_t, process);
}
void simcall_HANDLER_process_killall(smx_simcall_t simcall, int reset_pid) {