X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/f84705b633d5ebb1f5e71eaeac8204014285f225..17ac6c61bd407825851b824adbfa28d64fb69587:/src/kernel/activity/ActivityImpl.cpp diff --git a/src/kernel/activity/ActivityImpl.cpp b/src/kernel/activity/ActivityImpl.cpp index 36382b7c3b..1f373dd5ee 100644 --- a/src/kernel/activity/ActivityImpl.cpp +++ b/src/kernel/activity/ActivityImpl.cpp @@ -4,6 +4,7 @@ * under the terms of the license (GNU LGPL) which comes with this package. */ #include +#include #include #include "src/kernel/activity/ActivityImpl.hpp" @@ -19,9 +20,7 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(ker_activity, kernel, "Kernel activity-related synchronization"); -namespace simgrid { -namespace kernel { -namespace activity { +namespace simgrid::kernel::activity { ActivityImpl::~ActivityImpl() { @@ -29,13 +28,13 @@ ActivityImpl::~ActivityImpl() XBT_DEBUG("Destroy activity %p", this); } -void ActivityImpl::register_simcall(smx_simcall_t simcall) +void ActivityImpl::register_simcall(actor::Simcall* simcall) { simcalls_.push_back(simcall); simcall->issuer_->waiting_synchro_ = this; } -void ActivityImpl::unregister_simcall(smx_simcall_t simcall) +void ActivityImpl::unregister_simcall(actor::Simcall* simcall) { // Remove the first occurrence of simcall: auto j = boost::range::find(simcalls_, simcall); @@ -112,13 +111,13 @@ void ActivityImpl::wait_for(actor::ActorImpl* issuer, double timeout) /* 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)) { - resource::Action* sleep = issuer->get_host()->get_cpu()->sleep(timeout); - sleep->set_activity(comm); + resource::Action* sleep_action = issuer->get_host()->get_cpu()->sleep(timeout); + sleep_action->set_activity(comm); if (issuer == comm->src_actor_) - comm->src_timeout_ = sleep; + comm->src_timeout_ = sleep_action; else - comm->dst_timeout_ = sleep; + comm->dst_timeout_ = sleep_action; } else { SynchroImplPtr synchro(new SynchroImpl([this, issuer]() { this->unregister_simcall(&issuer->simcall_); @@ -141,12 +140,13 @@ void ActivityImpl::wait_any_for(actor::ActorImpl* issuer, const std::vector(issuer->simcall_.observer_); xbt_assert(observer != nullptr); xbt_assert(timeout <= 0.0, "Timeout not implemented for waitany in the model-checker"); - int idx = observer->get_value(); - auto* act = activities[idx]; - act->simcalls_.push_back(&issuer->simcall_); - observer->set_result(idx); - act->set_state(State::DONE); - act->finish(); + if (int idx = observer->get_value(); idx != -1) { + auto* act = activities.at(idx); + act->simcalls_.push_back(&issuer->simcall_); + observer->set_result(idx); + act->set_state(State::DONE); + act->finish(); + } return; } @@ -180,7 +180,7 @@ void ActivityImpl::suspend() return; XBT_VERB("This activity is suspended (remain: %f)", surf_action_->get_remains()); surf_action_->suspend(); - on_suspended(*this); + s4u::Activity::on_suspended(*get_iface()); } void ActivityImpl::resume() @@ -189,7 +189,7 @@ void ActivityImpl::resume() return; XBT_VERB("This activity is resumed (remain: %f)", surf_action_->get_remains()); surf_action_->resume(); - on_resumed(*this); + s4u::Activity::on_resumed(*get_iface()); } void ActivityImpl::cancel() @@ -200,7 +200,7 @@ void ActivityImpl::cancel() state_ = State::CANCELED; } -void ActivityImpl::handle_activity_waitany(smx_simcall_t simcall) +void ActivityImpl::handle_activity_waitany(actor::Simcall* simcall) { /* If a waitany simcall is waiting for this synchro to finish, then remove it from the other synchros in the waitany * list. Afterwards, get the position of the actual synchro in the waitany list and return it as the result of the @@ -236,8 +236,4 @@ void intrusive_ptr_release(ActivityImpl* activity) delete activity; } } -xbt::signal ActivityImpl::on_resumed; -xbt::signal ActivityImpl::on_suspended; -} -} -} // namespace simgrid::kernel::activity:: +} // namespace simgrid::kernel::activity