Example #1
0
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;
}
Example #2
0
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;
}