void CommImpl::wait_any_for(actor::ActorImpl* issuer, const std::vector<CommImpl*>& comms, double timeout)
{
- if (MC_is_active() || MC_record_replay_is_active()) {
- xbt_assert(timeout <= 0.0, "Timeout not implemented for waitany in the model-checker");
- int idx = issuer->simcall_.mc_value_;
- auto* comm = comms[idx];
- comm->simcalls_.push_back(&issuer->simcall_);
- simcall_comm_waitany__set__result(&issuer->simcall_, idx);
- comm->set_state(State::DONE);
- comm->finish();
- return;
- }
std::vector<ActivityImpl*> activities(comms.begin(), comms.end());
ActivityImpl::wait_any_for(issuer, activities, timeout);
}
if (not simcall->issuer_->get_host()->is_on()) {
simcall->issuer_->context_->set_wannadie();
} else {
- set_exception(simcall->issuer_);
- simcall->issuer_->simcall_answer();
+ // Do not answer to dying actors
+ if (not simcall->issuer_->context_->wannadie()) {
+ set_exception(simcall->issuer_);
+ simcall->issuer_->simcall_answer();
+ }
}
simcall->issuer_->waiting_synchro_ = nullptr;