case SIMIX_FAILED:
XBT_DEBUG("SIMIX_execution_finished: host '%s' failed", simcall->issuer->smx_host->name);
- if (simcall->issuer->smx_host == action->execution.host) {
- // add a reference to the action that will be destroyed when the killed process is cleaned up, and by the end of the current function
- surf_action_ref(action->execution.surf_exec);
- SIMIX_process_kill(simcall->issuer);
- } else {
- SMX_EXCEPTION(simcall->issuer, host_error, 0, "Host failed");
- }
+ simcall->issuer->context->iwannadie = 1;
+ //SMX_EXCEPTION(simcall->issuer, host_error, 0, "Host failed");
break;
case SIMIX_CANCELED:
xbt_die("Internal error in SIMIX_execution_finish: unexpected action state %d",
(int)action->state);
}
- simcall->issuer->waiting_action = NULL;
+ /* check if the host is down */
+ if (surf_workstation_model->extension.
+ workstation.get_state(simcall->issuer->smx_host->host) != SURF_RESOURCE_ON) {
+ simcall->issuer->context->iwannadie = 1;
+ }
+
+ simcall->issuer->waiting_action = NULL;
simcall->host_execution_wait.result = action->state;
SIMIX_simcall_answer(simcall);
}