static int util_eq_close(struct fid *fid) { struct util_eq *eq; struct slist_entry *entry; struct util_event *event; eq = container_of(fid, struct util_eq, eq_fid.fid); if (ofi_atomic_get32(&eq->ref)) return -FI_EBUSY; while (!slist_empty(&eq->list)) { entry = slist_remove_head(&eq->list); event = container_of(entry, struct util_event, entry); free(event); } if (eq->wait) { fi_poll_del(&eq->wait->pollset->poll_fid, &eq->eq_fid.fid, 0); if (eq->internal_wait) fi_close(&eq->wait->wait_fid.fid); } fastlock_destroy(&eq->lock); ofi_atomic_dec32(&eq->fabric->ref); free(eq); return 0; }
static int psmx_cntr_close(fid_t fid) { struct psmx_fid_cntr *cntr; cntr = container_of(fid, struct psmx_fid_cntr, cntr.fid); if (cntr->wait) { fi_poll_del(&cntr->wait->pollset->poll_fid, &cntr->cntr.fid, 0); if (cntr->wait_is_local) fi_close((fid_t)cntr->wait); } pthread_mutex_destroy(&cntr->trigger_lock); psmx_domain_release(cntr->domain); free(cntr); return 0; }