void uct_dc_ep_pending_purge(uct_ep_h tl_ep, uct_pending_purge_callback_t cb, void *arg) { uct_dc_iface_t *iface = ucs_derived_of(tl_ep->iface, uct_dc_iface_t); uct_dc_ep_t *ep = ucs_derived_of(tl_ep, uct_dc_ep_t); uct_purge_cb_args_t args = {cb, arg}; if (ep->dci == UCT_DC_EP_NO_DCI) { ucs_arbiter_group_purge(uct_dc_iface_dci_waitq(iface), &ep->arb_group, uct_dc_ep_abriter_purge_cb, &args); } else { ucs_arbiter_group_purge(uct_dc_iface_tx_waitq(iface), &ep->arb_group, uct_dc_ep_abriter_purge_cb, &args); uct_dc_iface_dci_free(iface, ep); } }
void uct_ugni_ep_pending_purge(uct_ep_h tl_ep, uct_pending_callback_t cb){ uct_ugni_iface_t *iface = ucs_derived_of(tl_ep->iface, uct_ugni_iface_t); uct_ugni_ep_t *ep = ucs_derived_of(tl_ep, uct_ugni_ep_t); ucs_arbiter_group_purge(&iface->arbiter, &ep->arb_group, uct_ugni_ep_abriter_purge_cb, cb); }
void uct_mm_ep_pending_purge(uct_ep_h tl_ep, uct_pending_purge_callback_t cb, void *arg) { uct_mm_iface_t *iface = ucs_derived_of(tl_ep->iface, uct_mm_iface_t); uct_mm_ep_t *ep = ucs_derived_of(tl_ep, uct_mm_ep_t); uct_purge_cb_args_t args = {cb, arg}; ucs_arbiter_group_purge(&iface->arbiter, &ep->arb_group, uct_mm_ep_abriter_purge_cb, &args); }
static UCS_CLASS_CLEANUP_FUNC(uct_ugni_ep_t) { uct_ugni_iface_t *iface = ucs_derived_of(self->super.super.iface, uct_ugni_iface_t); gni_return_t ugni_rc; ucs_debug("Removinig ep hash %x from iface %p", self->hash_key, iface); ucs_arbiter_group_purge(&iface->arbiter, &self->arb_group, uct_ugni_ep_abriter_purge_cb, NULL); uct_ugni_cdm_lock(&iface->cdm); ugni_rc = GNI_EpDestroy(self->ep); uct_ugni_cdm_unlock(&iface->cdm); if (GNI_RC_SUCCESS != ugni_rc) { ucs_warn("GNI_EpDestroy failed, Error status: %s %d", gni_err_str[ugni_rc], ugni_rc); } sglib_hashed_uct_ugni_ep_t_delete(iface->eps, self); uct_ugni_ep_pending_purge(&self->super.super, NULL, NULL); uct_ugni_put_flush_group(self->flush_group); }