+void RawImpl::post()
+{
+ if (surf_action_->get_state() == resource::Action::State::FAILED) {
+ state_ = State::FAILED;
+ } else if (surf_action_->get_state() == resource::Action::State::FINISHED) {
+ state_ = State::SRC_TIMEOUT;
+ }
+
+ clean_action();
+ /* Answer all simcalls associated with the synchro */
+ finish();
+}
+
+void RawImpl::finish()
+{
+ smx_simcall_t simcall = simcalls_.front();
+ simcalls_.pop_front();
+
+ if (state_ == State::FAILED) {
+ XBT_DEBUG("RawImpl::finish(): host '%s' failed", simcall->issuer_->get_host()->get_cname());
+ simcall->issuer_->context_->set_wannadie();
+ simcall->issuer_->exception_ = std::make_exception_ptr(HostFailureException(XBT_THROW_POINT, "Host failed"));
+ } else if (state_ != State::SRC_TIMEOUT) {
+ xbt_die("Internal error in RawImpl::finish() unexpected synchro state %d", static_cast<int>(state_));
+ }
+
+ finish_callback_();
+ simcall->issuer_->waiting_synchro_ = nullptr;
+ simcall->issuer_->simcall_answer();