void uct_ugni_udt_progress(void *arg) { uct_ugni_udt_iface_t * iface = (uct_ugni_udt_iface_t *)arg; uct_ugni_enter_async(&iface->super); ucs_arbiter_dispatch(&iface->super.arbiter, 1, uct_ugni_udt_ep_process_pending, NULL); uct_ugni_leave_async(&iface->super); }
ucs_status_t uct_ugni_ep_pending_add(uct_ep_h tl_ep, uct_pending_req_t *n, unsigned flags){ 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_STATIC_ASSERT(sizeof(ucs_arbiter_elem_t) <= UCT_PENDING_REQ_PRIV_LEN); uct_ugni_enter_async(iface); uct_pending_req_arb_group_push(&ep->arb_group, n); ucs_arbiter_group_schedule(&iface->arbiter, &ep->arb_group); UCT_TL_EP_STAT_PEND(&ep->super); uct_ugni_leave_async(iface); return UCS_OK; }
static UCS_CLASS_CLEANUP_FUNC(uct_ugni_udt_iface_t) { void *dummy; uct_ugni_enter_async(&self->super); uct_ugni_udt_clean_wildcard(self); ucs_async_remove_handler(ucs_async_pipe_rfd(&self->event_pipe),1); if (self->events_ready) { uct_ugni_proccess_datagram_pipe(ucs_async_pipe_rfd(&self->event_pipe),self); } uct_ugni_udt_terminate_thread(self); pthread_join(self->event_thread, &dummy); ucs_async_pipe_destroy(&self->event_pipe); ucs_mpool_put(self->desc_any); ucs_mpool_cleanup(&self->free_desc, 1); pthread_mutex_destroy(&self->device_lock); uct_ugni_leave_async(&self->super); }