void SIMIX_io_finish(smx_activity_t synchro) { for (smx_simcall_t const& simcall : synchro->simcalls_) { switch (synchro->state_) { case SIMIX_DONE: /* do nothing, synchro done */ break; case SIMIX_FAILED: SMX_EXCEPTION(simcall->issuer, io_error, 0, "IO failed"); break; case SIMIX_CANCELED: SMX_EXCEPTION(simcall->issuer, cancel_error, 0, "Canceled"); break; default: xbt_die("Internal error in SIMIX_io_finish: unexpected synchro state %d", static_cast<int>(synchro->state_)); } if (simcall->issuer->host->is_off()) { simcall->issuer->context->iwannadie = 1; } simcall->issuer->waiting_synchro = nullptr; SIMIX_simcall_answer(simcall); } /* We no longer need it */ SIMIX_io_destroy(synchro); }
static void SIMIX_synchro_finish(smx_action_t action) { XBT_IN("(%p)",action); smx_simcall_t simcall = xbt_fifo_shift(action->simcalls); switch (action->state) { case SIMIX_SRC_TIMEOUT: SMX_EXCEPTION(simcall->issuer, timeout_error, 0, "Synchro's wait timeout"); break; case SIMIX_FAILED: simcall->issuer->context->iwannadie = 1; // SMX_EXCEPTION(simcall->issuer, host_error, 0, "Host failed"); break; default: THROW_IMPOSSIBLE; break; } SIMIX_synchro_stop_waiting(simcall->issuer, simcall); simcall->issuer->waiting_action = NULL; SIMIX_synchro_destroy(action); SIMIX_simcall_answer(simcall); XBT_OUT(); }
void SIMIX_synchro_finish(smx_activity_t synchro) { XBT_IN("(%p)",synchro); smx_simcall_t simcall = synchro->simcalls.front(); synchro->simcalls.pop_front(); switch (synchro->state) { case SIMIX_SRC_TIMEOUT: SMX_EXCEPTION(simcall->issuer, timeout_error, 0, "Synchro's wait timeout"); break; case SIMIX_FAILED: simcall->issuer->context->iwannadie = 1; // SMX_EXCEPTION(simcall->issuer, host_error, 0, "Host failed"); break; default: THROW_IMPOSSIBLE; break; } SIMIX_synchro_stop_waiting(simcall->issuer, simcall); simcall->issuer->waiting_synchro = nullptr; delete synchro; SIMIX_simcall_answer(simcall); XBT_OUT(); }