XBT_PUBLIC(int) SIMIX_comm_has_send_match(smx_mailbox_t mbox, int (*match_fun)(void*, void*), void* data);
XBT_PUBLIC(int) SIMIX_comm_has_recv_match(smx_mailbox_t mbox, int (*match_fun)(void*, void*), void* data);
XBT_PUBLIC(void) SIMIX_comm_finish(smx_activity_t synchro);
-XBT_PUBLIC(smx_activity_t) SIMIX_comm_ref(smx_activity_t comm);
-XBT_PUBLIC(void) SIMIX_comm_unref(smx_activity_t comm);
/******************************************************************************/
/* SIMIX simcalls */
if (state == SIMIX_WAITING) {
mbox->remove(this);
state = SIMIX_CANCELED;
- SIMIX_comm_unref(this);
+ this->unref();
} else if (not MC_is_active() /* when running the MC there are no surf actions */
&& not MC_record_replay_is_active() && (state == SIMIX_READY || state == SIMIX_RUNNING)) {
/* if there are simcalls associated with the synchro, then answer them */
if (not simcalls.empty()) {
SIMIX_comm_finish(this);
- SIMIX_comm_unref(this);
+ this->unref();
}
}
simcall_comm_recv(MSG_process_self()->getImpl(), mailbox->getImpl(), task, nullptr, nullptr, nullptr, nullptr, timeout, rate);
XBT_DEBUG("Got task %s from %s",(*task)->name,mailbox->name());
(*task)->simdata->setNotUsed();
- SIMIX_comm_unref((*task)->simdata->comm);
}
catch (xbt_ex& e) {
switch (e.category) {
if (finished && comm->task_received != nullptr) {
/* I am the receiver */
(*comm->task_received)->simdata->setNotUsed();
- SIMIX_comm_unref(comm->s_comm);
+ comm->s_comm->unref();
}
}
catch (xbt_ex& e) {
if (status == MSG_OK && comm->task_received != nullptr) {
/* I am the receiver */
(*comm->task_received)->simdata->setNotUsed();
- SIMIX_comm_unref(comm->s_comm);
+ comm->s_comm->unref();
}
}
{
try {
simcall_comm_wait(comm->s_comm, timeout);
- SIMIX_comm_unref(comm->s_comm);
+ comm->s_comm->unref();
if (comm->task_received != nullptr) {
/* I am the receiver */
if (comm->task_received != nullptr) {
/* I am the receiver */
(*comm->task_received)->simdata->setNotUsed();
- SIMIX_comm_unref(comm->s_comm);
+ comm->s_comm->unref();
}
return finished_index;
simcall_set_category(comm, task->category);
t_simdata->comm = static_cast<simgrid::kernel::activity::CommImpl*>(comm);
simcall_comm_wait(comm, timeout);
- SIMIX_comm_unref(comm);
+ comm->unref();
}
catch (xbt_ex& e) {
switch (e.category) {
xbt_backtrace_display_current();
}
if (pimpl_)
- SIMIX_comm_unref(pimpl_);
+ pimpl_->unref();
}
s4u::CommPtr Comm::send_init(s4u::MailboxPtr chan)
if (comm->detached)
XBT_DEBUG("Don't destroy it since it's a detached comm and I'm the sender");
else
- SIMIX_comm_unref(comm);
+ comm->unref();
} else if (comm->dst_proc == process) {
XBT_DEBUG("Found an unfinished recv comm %p, state %d, src = %p, dst = %p",
comm, (int)comm->state, comm->src_proc, comm->dst_proc);
auto i = boost::range::find(process->waiting_synchro->simcalls, &process->simcall);
if (i != process->waiting_synchro->simcalls.end())
process->waiting_synchro->simcalls.remove(&process->simcall);
- SIMIX_comm_unref(comm);
+ comm->unref();
} else if (sleep != nullptr) {
SIMIX_process_sleep_destroy(process->waiting_synchro);
XBT_DEBUG("Found a matching communication synchro %p", comm);
if (remove_matching)
deque->erase(it);
- SIMIX_comm_ref(comm);
+ comm->ref();
#if SIMGRID_HAVE_MC
comm->mbox_cpy = comm->mbox;
#endif
//this mailbox is for small messages, which have to be sent right now
other_comm->state = SIMIX_READY;
other_comm->dst_proc=mbox->permanent_receiver.get();
- other_comm = static_cast<simgrid::kernel::activity::CommImpl*>(SIMIX_comm_ref(other_comm));
+ other_comm->ref();
mbox->done_comm_queue.push_back(other_comm);
XBT_DEBUG("pushing a message into the permanent receive list %p, comm %p", mbox, other_comm);
}
} else {
XBT_DEBUG("Receive already pushed");
- SIMIX_comm_unref(this_comm);
- SIMIX_comm_unref(this_comm);
+ this_comm->unref();
+ this_comm->unref();
other_comm->state = SIMIX_READY;
other_comm->type = SIMIX_COMM_READY;
//communication already done, get it inside the list of completed comms
if (mbox->permanent_receiver != nullptr && not mbox->done_comm_queue.empty()) {
- SIMIX_comm_unref(this_synchro);
+ this_synchro->unref();
XBT_DEBUG("We have a comm that has probably already been received, trying to match it, to skip the communication");
//find a match in the list of already received comms
other_comm = _find_matching_comm(&mbox->done_comm_queue, SIMIX_COMM_SEND, match_fun, data, this_synchro,
other_comm->state = SIMIX_DONE;
other_comm->type = SIMIX_COMM_DONE;
other_comm->mbox = nullptr;
- SIMIX_comm_unref(other_comm);
+ other_comm->unref();
}
- SIMIX_comm_unref(other_comm);
- SIMIX_comm_unref(this_synchro);
+ other_comm->unref();
+ this_synchro->unref();
}
} else {
/* Prepare a comm describing us, so that it gets passed to the user-provided filter of other side */
other_comm->state = SIMIX_READY;
other_comm->type = SIMIX_COMM_READY;
- SIMIX_comm_unref(this_synchro);
- SIMIX_comm_unref(this_synchro);
+ this_synchro->unref();
+ this_synchro->unref();
}
dst_proc->comms.push_back(other_comm);
}
}
if(other_synchro)
- SIMIX_comm_unref(other_synchro);
+ other_synchro->unref();
- SIMIX_comm_unref(this_comm);
+ this_comm->unref();
return other_synchro;
}
/* (this function might be called from both communication ends) */
comm->copied = 1;
}
-
-/** Increase the refcount for this comm */
-smx_activity_t SIMIX_comm_ref(smx_activity_t comm)
-{
- if (comm != nullptr)
- comm->ref();
- return comm;
-}
-
-/** Decrease the refcount for this comm */
-void SIMIX_comm_unref(smx_activity_t comm)
-{
- if (comm != nullptr)
- comm->unref();
-}