X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/d1ce25d36729721b7d7eed0fa4425e401db8a092..c8b31ee6aba2b75d54acd9c94514d54da16168d6:/src/s4u/s4u_comm.cpp diff --git a/src/s4u/s4u_comm.cpp b/src/s4u/s4u_comm.cpp index 547e39c424..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_); @@ -117,8 +116,6 @@ void Comm::wait() { } } state_ = finished; - if (pimpl_) - pimpl_->unref(); } void Comm::wait(double timeout) { @@ -127,7 +124,6 @@ void Comm::wait(double timeout) { if (state_ == started) { simcall_comm_wait(pimpl_, timeout); state_ = finished; - pimpl_->unref(); return; } @@ -143,8 +139,6 @@ void Comm::wait(double timeout) { userData_, timeout, rate_); } state_ = finished; - if (pimpl_) - pimpl_->unref(); } void Comm::send_detached(MailboxPtr dest, void* data, int simulatedSize) @@ -177,23 +171,23 @@ 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; - pimpl_->unref(); return true; } return false;