X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/29d98d1ceb682fbc4c734a92353be4b0bcd5d17b..c8b31ee6aba2b75d54acd9c94514d54da16168d6:/src/s4u/s4u_comm.cpp diff --git a/src/s4u/s4u_comm.cpp b/src/s4u/s4u_comm.cpp index d8c635be1a..7729d3e6f9 100644 --- a/src/s4u/s4u_comm.cpp +++ b/src/s4u/s4u_comm.cpp @@ -23,8 +23,6 @@ Comm::~Comm() XBT_INFO("pimpl_ is null"); xbt_backtrace_display_current(); } - if (pimpl_) - pimpl_->unref(); } s4u::CommPtr Comm::send_init(s4u::MailboxPtr chan) @@ -90,6 +88,7 @@ void Comm::start() { matchFunction_, cleanFunction_, copyDataFunction_, userData_, detached_); } else if (dstBuff_ != nullptr) { // Receiver side + xbt_assert(not detached_, "Receive cannot be detached"); pimpl_ = simcall_comm_irecv(receiver_, mailbox_->getImpl(), dstBuff_, &dstBuffSize_, matchFunction_, copyDataFunction_, userData_, rate_); @@ -118,6 +117,7 @@ void Comm::wait() { } state_ = finished; } + void Comm::wait(double timeout) { xbt_assert(state_ == started || state_ == inited); @@ -150,6 +150,7 @@ void Comm::send_detached(MailboxPtr dest, void* data, int simulatedSize) res->detached_ = true; res->start(); } + s4u::CommPtr Comm::send_async(MailboxPtr dest, void* data, int simulatedSize) { s4u::CommPtr res = CommPtr(s4u::Comm::send_init(dest)); @@ -170,19 +171,21 @@ s4u::CommPtr Comm::recv_async(MailboxPtr dest, void** data) void Comm::cancel() { - simgrid::kernel::activity::CommImpl* commPimpl = static_cast(pimpl_); + simgrid::kernel::activity::CommImplPtr commPimpl = + boost::static_pointer_cast(pimpl_); commPimpl->cancel(); } + bool Comm::test() { xbt_assert(state_ == inited || state_ == started || state_ == finished); - - if (state_ == finished) + + if (state_ == finished) xbt_die("Don't call test on a finished comm."); - + if (state_ == inited) { this->start(); } - + if(simcall_comm_test(pimpl_)){ state_ = finished; return true;