Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Properly register the waiter in wait_any_for(), so that it gets handled on suspend...
authorMartin Quinson <martin.quinson@ens-rennes.fr>
Thu, 23 Nov 2023 12:08:47 +0000 (13:08 +0100)
committerMartin Quinson <martin.quinson@ens-rennes.fr>
Thu, 23 Nov 2023 12:49:23 +0000 (13:49 +0100)
We all love fixing obscure bugs on release days. That's how we fail
our release processes.

src/kernel/activity/ActivityImpl.cpp

index 015ca20..f1a9859 100644 (file)
@@ -146,7 +146,7 @@ void ActivityImpl::wait_any_for(actor::ActorImpl* issuer, const std::vector<Acti
     xbt_assert(timeout <= 0.0, "Timeout not implemented for waitany in the model-checker");
     if (int idx = observer->get_value(); idx != -1) {
       auto* act = activities.at(idx);
-      act->simcalls_.push_back(&issuer->simcall_);
+      act->register_simcall(&issuer->simcall_);
       observer->set_result(idx);
       act->set_state(State::DONE);
       act->finish();
@@ -168,7 +168,7 @@ void ActivityImpl::wait_any_for(actor::ActorImpl* issuer, const std::vector<Acti
 
   for (auto* act : activities) {
     /* associate this simcall to the the synchro */
-    act->simcalls_.push_back(&issuer->simcall_);
+    act->register_simcall(&issuer->simcall_);
     /* see if the synchro is already finished */
     if (act->get_state() != State::WAITING && act->get_state() != State::RUNNING) {
       act->finish();