X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/53b4e7e91edb69299011fbfa600df2cdf331b520..021e27fc5af34eab44297b9a49a53a65b27f6865:/src/kernel/activity/ActivityImpl.cpp diff --git a/src/kernel/activity/ActivityImpl.cpp b/src/kernel/activity/ActivityImpl.cpp index 39f6d47f8d..015ca2064b 100644 --- a/src/kernel/activity/ActivityImpl.cpp +++ b/src/kernel/activity/ActivityImpl.cpp @@ -63,7 +63,7 @@ const char* ActivityImpl::get_state_str() const bool ActivityImpl::test(actor::ActorImpl* issuer) { if (state_ != State::WAITING && state_ != State::RUNNING) { - post(); + finish(); issuer->exception_ = nullptr; // Do not propagate exception in that case return true; } @@ -106,8 +106,12 @@ void ActivityImpl::wait_for(actor::ActorImpl* issuer, double timeout) /* If the synchro is already finished then perform the error handling */ if (state_ != State::WAITING && state_ != State::RUNNING) { - post(); + finish(); } else { + /* As Messages in Message Queues are virtually instantaneous, we do not need a timeout */ + /* Or maybe we do, and will have to implement a specific way to handle them is need arises */ + if (dynamic_cast(this) != nullptr) + return; /* we need a sleep action (even when the timeout is infinite) to be notified of host failures */ /* Comms handle that a bit differently of the other activities */ if (auto* comm = dynamic_cast(this)) { @@ -145,7 +149,7 @@ void ActivityImpl::wait_any_for(actor::ActorImpl* issuer, const std::vectorsimcalls_.push_back(&issuer->simcall_); observer->set_result(idx); act->set_state(State::DONE); - act->post(); + act->finish(); } return; } @@ -167,7 +171,7 @@ void ActivityImpl::wait_any_for(actor::ActorImpl* issuer, const std::vectorsimcalls_.push_back(&issuer->simcall_); /* see if the synchro is already finished */ if (act->get_state() != State::WAITING && act->get_state() != State::RUNNING) { - act->post(); + act->finish(); break; } } @@ -176,11 +180,10 @@ void ActivityImpl::wait_any_for(actor::ActorImpl* issuer, const std::vectorget_remains()); + get_iface()->fire_on_suspend(); + get_iface()->fire_on_this_suspend(); model_action_->suspend(); - s4u::Activity::on_suspended(*get_iface()); } void ActivityImpl::resume() @@ -188,8 +191,9 @@ void ActivityImpl::resume() if (model_action_ == nullptr) return; XBT_VERB("This activity is resumed (remain: %f)", model_action_->get_remains()); + get_iface()->fire_on_resume(); + get_iface()->fire_on_this_resume(); model_action_->resume(); - s4u::Activity::on_resumed(*get_iface()); } void ActivityImpl::cancel()