예제 #1
0
파일: dc_ep.c 프로젝트: alex-mikheev/ucx
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);
}
예제 #2
0
파일: dc_mlx5_ep.c 프로젝트: shamisp/ucx
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);
}
예제 #3
0
파일: rdmacm_ep.c 프로젝트: xinzhao3/ucx
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);
}
예제 #4
0
파일: tcp_ep.c 프로젝트: ParaStation/psmpi2
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);
}