-
-/**
- * \brief Destroy a communicate synchro
- * \param synchro The communicate synchro to be destroyed
- */
-void SIMIX_comm_destroy(smx_synchro_t synchro)
-{
- simgrid::simix::Comm *comm = static_cast<simgrid::simix::Comm*>(synchro);
-
- XBT_DEBUG("Destroy synchro %p (refcount: %d), state: %d", comm, comm->refcount, (int)comm->state);
-
- if (comm->refcount <= 0) {
- xbt_backtrace_display_current();
- xbt_die("This comm has a negative refcount! You must not call test() or wait() more than once on a given communication.");
- }
- comm->refcount--;
- if (comm->refcount > 0)
- return;
- XBT_DEBUG("Really free communication %p; refcount is now %d", comm, comm->refcount);
-
- comm->cleanupSurf();
-
- if (comm->detached && comm->state != SIMIX_DONE) {
- /* the communication has failed and was detached:
- * we have to free the buffer */
- if (comm->clean_fun) {
- comm->clean_fun(comm->src_buff);
- }
- comm->src_buff = NULL;
- }
-
- if(comm->mbox)
- SIMIX_mbox_remove(comm->mbox, comm);
-
- delete comm;
-}
-