void uct_dc_ep_release(uct_dc_ep_t *ep) { ucs_assert_always(ep->state == UCT_DC_EP_INVALID); ucs_debug("release dc_ep %p", ep); ucs_list_del(&ep->list); ucs_free(ep); }
void uct_dc_mlx5_ep_release(uct_dc_mlx5_ep_t *ep) { ucs_assert_always(!(ep->flags & UCT_DC_MLX5_EP_FLAG_VALID)); ucs_debug("release dc_mlx5_ep %p", ep); ucs_list_del(&ep->list); ucs_free(ep); }
static UCS_CLASS_CLEANUP_FUNC(uct_rdmacm_ep_t) { uct_rdmacm_iface_t *iface = ucs_derived_of(self->super.super.iface, uct_rdmacm_iface_t); ucs_debug("rdmacm_ep %p: destroying", self); UCS_ASYNC_BLOCK(iface->super.worker->async); if (self->is_on_pending) { ucs_list_del(&self->list_elem); self->is_on_pending = 0; } /* remove the slow progress function in case it was placed on the slow progress * chain but wasn't invoked yet */ uct_worker_progress_unregister_safe(&iface->super.worker->super, &self->slow_prog_id); /* if the destroyed ep is the active one on the iface, mark it as destroyed * so that arriving events on the iface won't try to access this ep */ if (iface->ep == self) { iface->ep = UCT_RDMACM_IFACE_BLOCKED_NO_EP; } UCS_ASYNC_UNBLOCK(iface->super.worker->async); ucs_free(self->priv_data); }
static UCS_CLASS_CLEANUP_FUNC(uct_tcp_ep_t) { uct_tcp_iface_t *iface = ucs_derived_of(self->super.super.iface, uct_tcp_iface_t); ucs_debug("tcp_ep %p: destroying", self); UCS_ASYNC_BLOCK(iface->super.worker->async); ucs_list_del(&self->list); UCS_ASYNC_UNBLOCK(iface->super.worker->async); ucs_free(self->buf); close(self->fd); }