static void cache_node_deleter(void *data, void *deleter_arg) { cache_node_t *node = (cache_node_t *)data; UNUSED(deleter_arg); REQUIRE(data != NULL); ldapdb_rdatalist_destroy(node->mctx, &node->rdatalist); MEM_PUT_AND_DETACH(node); }
void mldap_destroy(mldapdb_t **mldapp) { mldapdb_t *mldap; REQUIRE(mldapp != NULL); mldap = *mldapp; if (mldap == NULL) return; metadb_destroy(&mldap->mdb); MEM_PUT_AND_DETACH(mldap); *mldapp = NULL; }
void destroy_ldap_cache(ldap_cache_t **cachep) { ldap_cache_t *cache; int is_locked = 0; REQUIRE(cachep != NULL && *cachep != NULL); cache = *cachep; if (cache->rbt) { CONTROLED_LOCK(&cache->mutex); dns_rbt_destroy(&cache->rbt); cache->rbt = NULL; CONTROLED_UNLOCK(&cache->mutex); DESTROYLOCK(&cache->mutex); } MEM_PUT_AND_DETACH(cache); *cachep = NULL; }
isc_result_t mldap_new(isc_mem_t *mctx, mldapdb_t **mldapp) { isc_result_t result; mldapdb_t *mldap = NULL; REQUIRE(mldapp != NULL && *mldapp == NULL); CHECKED_MEM_GET_PTR(mctx, mldap); ZERO_PTR(mldap); isc_mem_attach(mctx, &mldap->mctx); CHECK(isc_refcount_init(&mldap->generation, 0)); CHECK(metadb_new(mctx, &mldap->mdb)); *mldapp = mldap; return result; cleanup: metadb_destroy(&mldap->mdb); MEM_PUT_AND_DETACH(mldap); return result; }