static int rxm_ep_close(struct fid *fid) { struct rxm_ep *rxm_ep; int ret; rxm_ep = container_of(fid, struct rxm_ep, util_ep.ep_fid.fid); if (rxm_ep->util_ep.av) { ofi_cmap_free(rxm_ep->cmap); atomic_dec(&rxm_ep->util_ep.av->ref); } rxm_ep_txrx_res_close(rxm_ep); ret = rxm_ep_msg_res_close(rxm_ep); if (rxm_ep->util_ep.tx_cq) { fid_list_remove(&rxm_ep->util_ep.tx_cq->ep_list, &rxm_ep->util_ep.tx_cq->ep_list_lock, &rxm_ep->util_ep.ep_fid.fid); atomic_dec(&rxm_ep->util_ep.tx_cq->ref); } if (rxm_ep->util_ep.rx_cq) { fid_list_remove(&rxm_ep->util_ep.rx_cq->ep_list, &rxm_ep->util_ep.rx_cq->ep_list_lock, &rxm_ep->util_ep.ep_fid.fid); atomic_dec(&rxm_ep->util_ep.rx_cq->ref); } ofi_endpoint_close(&rxm_ep->util_ep); free(rxm_ep); return ret; }
static int rxm_ep_close(struct fid *fid) { struct rxm_ep *rxm_ep; int ret, retv = 0; rxm_ep = container_of(fid, struct rxm_ep, util_ep.ep_fid.fid); if (rxm_ep->util_ep.av) { ofi_cmap_free(rxm_ep->cmap); atomic_dec(&rxm_ep->util_ep.av->ref); } ret = fi_close(&rxm_ep->srx_ctx->fid); if (ret) { FI_WARN(&rxm_prov, FI_LOG_EP_CTRL, "Unable to close msg shared ctx\n"); retv = ret; } ret = fi_close(&rxm_ep->msg_pep->fid); if (ret) { FI_WARN(&rxm_prov, FI_LOG_EP_CTRL, "Unable to close msg passive EP\n"); retv = ret; } fi_freeinfo(rxm_ep->msg_info); if (rxm_ep->util_ep.rx_cq) atomic_dec(&rxm_ep->util_ep.rx_cq->ref); if (rxm_ep->util_ep.tx_cq) atomic_dec(&rxm_ep->util_ep.tx_cq->ref); atomic_dec(&rxm_ep->util_ep.domain->ref); free(rxm_ep); return retv; }