XBT_INFO("pimpl_ is null");
xbt_backtrace_display_current();
}
- if (pimpl_)
- pimpl_->unref();
}
s4u::CommPtr Comm::send_init(s4u::MailboxPtr chan)
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_);
}
state_ = finished;
}
+
void Comm::wait(double timeout) {
xbt_assert(state_ == started || state_ == inited);
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));
void Comm::cancel()
{
- simgrid::kernel::activity::CommImpl* commPimpl = static_cast<simgrid::kernel::activity::CommImpl*>(pimpl_);
+ simgrid::kernel::activity::CommImplPtr commPimpl =
+ boost::static_pointer_cast<simgrid::kernel::activity::CommImpl>(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;