-/* Copyright (c) 2007-2022. The SimGrid Team. All rights reserved. */
+/* Copyright (c) 2007-2023. The SimGrid Team. All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
{
return to_c_str(state_);
}
-
+
bool ActivityImpl::test(actor::ActorImpl* issuer)
{
if (state_ != State::WAITING && state_ != State::RUNNING) {
auto* observer = dynamic_cast<kernel::actor::ActivityWaitanySimcall*>(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;
}