// Com contains a matching c' = AsyncReceive(m, _) with a
for (const auto e : C) {
const bool transition_type_check = [&]() {
- if (const auto* async_recv = dynamic_cast<const CommSendTransition*>(e->get_transition());
+ if (const auto* async_recv = dynamic_cast<const CommRecvTransition*>(e->get_transition());
async_recv != nullptr && async_recv->get_mailbox() == recv_mailbox) {
return true;
}
// in `C`. The issuer of the `CommWait` in `C` is the event in `C`
// whose transition is the `CommRecv` or `CommSend` whose resulting
// communication this `CommWait` waits on
- const auto issuer = std::find_if(C.begin(), C.end(), [=](const UnfoldingEvent* e) {
+ const auto issuer = std::find_if(C.begin(), C.end(), [&](const UnfoldingEvent* e) {
if (const CommRecvTransition* e_issuer_receive = dynamic_cast<const CommRecvTransition*>(e->get_transition());
e_issuer_receive != nullptr) {
- return wait_comm == e_issuer_receive->get_comm();
+ return e_issuer_receive->aid_ == wait_action->aid_ && wait_comm == e_issuer_receive->get_comm();
}
if (const CommSendTransition* e_issuer_send = dynamic_cast<const CommSendTransition*>(e->get_transition());
e_issuer_send != nullptr) {
- return wait_comm == e_issuer_send->get_comm();
+ return e_issuer_send->aid_ == wait_action->aid_ && wait_comm == e_issuer_send->get_comm();
}
return false;
// do: `CommWait` will never be enabled in the empty configuration (at
// least two actions must be executed before)
if (pre_event_a_C.has_value(); const auto unwrapped_pre_event = pre_event_a_C.value()) {
-
// A necessary condition is that the issuer be present in
// config({preEvt(a, C)}); otherwise, the `CommWait` could not
// be enabled since the communication on which it waits would not
if (const CommRecvTransition* e_issuer_receive =
dynamic_cast<const CommRecvTransition*>(e_issuer->get_transition());
e_issuer_receive != nullptr) {
-
const unsigned issuer_mailbox = e_issuer_receive->get_mailbox();
// Check from the config -> how many sends have there been
} else if (const CommSendTransition* e_issuer_send =
dynamic_cast<const CommSendTransition*>(e_issuer->get_transition());
e_issuer_send != nullptr) {
-
const unsigned issuer_mailbox = e_issuer_send->get_mailbox();
// Check from e_issuer -> what place is the issuer in?
for (const auto e : C) {
if (const CommSendTransition* e_issuer_send = dynamic_cast<const CommSendTransition*>(e_issuer->get_transition());
e_issuer_send != nullptr) {
-
// If the provider of the communication for `CommWait` is a
// `CommSend(m)`, then we only care about `e` if `λ(e) == `CommRecv(m)`.
// All other actions would be independent with the wait action (including
} else if (const CommRecvTransition* e_issuer_recv =
dynamic_cast<const CommRecvTransition*>(e_issuer->get_transition());
e_issuer_recv != nullptr) {
-
// If the provider of the communication for `CommWait` is a
// `CommRecv(m)`, then we only care about `e` if `λ(e) == `CommSend(m)`.
// All other actions would be independent with the wait action (including
continue;
}
- const auto issuer_mailbox = e_issuer_send->get_mailbox();
+ const auto issuer_mailbox = e_issuer_recv->get_mailbox();
const CommSendTransition* e_send = dynamic_cast<const CommSendTransition*>(e->get_transition());
if (e_send->get_mailbox() != issuer_mailbox) {
continue;
return EventSet();
}
-} // namespace simgrid::mc::udpor
\ No newline at end of file
+} // namespace simgrid::mc::udpor