X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/72d32c4e88a57f4786f62fec48a1bfa454adbff9..cf6de77237062e35cbc13438716835a1403a1444:/src/kernel/activity/ActivityImpl.cpp diff --git a/src/kernel/activity/ActivityImpl.cpp b/src/kernel/activity/ActivityImpl.cpp index 1c569d273d..1f373dd5ee 100644 --- a/src/kernel/activity/ActivityImpl.cpp +++ b/src/kernel/activity/ActivityImpl.cpp @@ -111,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_); @@ -140,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; }