X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/3368ca8f8b3fb922a94a217f0afc3243ae18c8f5..5bc3597e1513c7b94497ae0ea819e5fa2e28058a:/src/s4u/s4u_comm.cpp diff --git a/src/s4u/s4u_comm.cpp b/src/s4u/s4u_comm.cpp index 070f7d1076..abc76c9fc1 100644 --- a/src/s4u/s4u_comm.cpp +++ b/src/s4u/s4u_comm.cpp @@ -83,7 +83,10 @@ void Comm::start() { state_ = started; } void Comm::wait() { - xbt_assert(state_ == started || state_ == inited); + xbt_assert(state_ == started || state_ == inited || state_ == finished); + + if (state_ == finished) + return; if (state_ == started) simcall_comm_wait(pimpl_, -1/*timeout*/); @@ -103,7 +106,10 @@ void Comm::wait() { } void Comm::wait(double timeout) { - xbt_assert(state_ == started || state_ == inited); + xbt_assert(state_ == started || state_ == inited || state_ == finished); + + if (state_ == finished) + return; if (state_ == started) { simcall_comm_wait(pimpl_, timeout); @@ -140,7 +146,8 @@ void Comm::cancel() commPimpl->cancel(); } -bool Comm::test() { +bool Comm::test() +{ xbt_assert(state_ == inited || state_ == started || state_ == finished); if (state_ == finished) { @@ -158,6 +165,11 @@ bool Comm::test() { return false; } +MailboxPtr Comm::getMailbox() +{ + return mailbox_; +} + void intrusive_ptr_release(simgrid::s4u::Comm* c) { if (c->refcount_.fetch_sub(1, std::memory_order_release) == 1) {