+void ExecImpl::set_exception(actor::ActorImpl* issuer)
+{
+ switch (state_) {
+ case State::FAILED:
+ static_cast<s4u::Exec*>(get_iface())->complete(s4u::Activity::State::FAILED);
+ if (issuer->get_host()->is_on())
+ issuer->exception_ = std::make_exception_ptr(HostFailureException(XBT_THROW_POINT, "Host failed"));
+ else /* else, the actor will be killed with no possibility to survive */
+ issuer->context_->set_wannadie();
+ break;
+
+ case State::CANCELED:
+ issuer->exception_ = std::make_exception_ptr(CancelException(XBT_THROW_POINT, "Execution Canceled"));
+ break;
+
+ case State::TIMEOUT:
+ issuer->exception_ = std::make_exception_ptr(TimeoutException(XBT_THROW_POINT, "Timeouted"));
+ break;
+
+ default:
+ xbt_assert(state_ == State::DONE, "Internal error in ExecImpl::finish(): unexpected synchro state %s",
+ to_c_str(state_));
+ }
+}