X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/e16ebb1333db2cee332bbfed4098df88777cec22..6d14999afc8567368d13d1b1ad108ac9ddae32ae:/src/s4u/s4u_comm.cpp diff --git a/src/s4u/s4u_comm.cpp b/src/s4u/s4u_comm.cpp index 6ab47cecb7..9f4ad0b438 100644 --- a/src/s4u/s4u_comm.cpp +++ b/src/s4u/s4u_comm.cpp @@ -25,22 +25,6 @@ Comm::~Comm() } } -s4u::CommPtr Comm::send_init(s4u::MailboxPtr chan) -{ - CommPtr res = CommPtr(new s4u::Comm()); - res->sender_ = SIMIX_process_self(); - res->mailbox_ = chan; - return res; -} - -s4u::CommPtr Comm::recv_init(s4u::MailboxPtr chan) -{ - CommPtr res = CommPtr(new s4u::Comm()); - res->receiver_ = SIMIX_process_self(); - res->mailbox_ = chan; - return res; -} - void Comm::setRate(double rate) { xbt_assert(state_==inited); rate_ = rate; @@ -99,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*/); @@ -119,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); @@ -146,24 +136,7 @@ void Comm::detach() xbt_assert(state_ == inited, "You cannot detach communications once they are started."); xbt_assert(srcBuff_ != nullptr && srcBuffSize_ != 0, "You can only detach sends, not recvs"); detached_ = true; -} - -s4u::CommPtr Comm::send_async(MailboxPtr dest, void* data, int simulatedSize) -{ - s4u::CommPtr res = CommPtr(s4u::Comm::send_init(dest)); - res->setRemains(simulatedSize); - res->srcBuff_ = data; - res->srcBuffSize_ = sizeof(void*); - res->start(); - return res; -} - -s4u::CommPtr Comm::recv_async(MailboxPtr dest, void** data) -{ - s4u::CommPtr res = CommPtr(s4u::Comm::recv_init(dest)); - res->setDstData(data, sizeof(*data)); - res->start(); - return res; + start(); } void Comm::cancel()