- switch (state_) {
- case State::DONE:
- /* do nothing, synchro done */
- XBT_DEBUG("ExecImpl::finish(): execution successful");
- break;
-
- case State::FAILED:
- XBT_DEBUG("ExecImpl::finish(): host '%s' failed", simcall->issuer_->get_host()->get_cname());
- simcall->issuer_->context_->set_wannadie();
- if (simcall->issuer_->get_host()->is_on())
- simcall->issuer_->exception_ =
- std::make_exception_ptr(simgrid::HostFailureException(XBT_THROW_POINT, "Host failed"));
- /* else, the actor will be killed with no possibility to survive */
- break;
-
- case State::CANCELED:
- XBT_DEBUG("ExecImpl::finish(): execution canceled");
- simcall->issuer_->exception_ =
- std::make_exception_ptr(simgrid::CancelException(XBT_THROW_POINT, "Execution Canceled"));
- break;
-
- case State::TIMEOUT:
- XBT_DEBUG("ExecImpl::finish(): execution timeouted");
- simcall->issuer_->exception_ = std::make_exception_ptr(simgrid::TimeoutException(XBT_THROW_POINT, "Timeouted"));
- break;
-
- default:
- xbt_die("Internal error in ExecImpl::finish(): unexpected synchro state %d", static_cast<int>(state_));
- }