void
isc_tlsctx_cache_detach(isc_tlsctx_cache_t **pcache) {
- isc_tlsctx_cache_t *cache;
+ isc_tlsctx_cache_t *cache = NULL;
isc_ht_iter_t *it = NULL;
isc_result_t result;
+
REQUIRE(pcache != NULL);
+
cache = *pcache;
+ *pcache = NULL;
+
REQUIRE(VALID_TLSCTX_CACHE(cache));
if (isc_refcount_decrement(&cache->references) > 1) {
return;
}
+ cache->magic = 0;
+
RUNTIME_CHECK(isc_ht_iter_create(cache->data, &it) == ISC_R_SUCCESS);
for (result = isc_ht_iter_first(it); result == ISC_R_SUCCESS;
result = isc_ht_iter_delcurrent_next(it))
isc_ht_iter_current(it, (void **)&entry);
tlsctx_cache_entry_destroy(cache->mctx, entry);
}
+
isc_ht_iter_destroy(&it);
isc_ht_destroy(&cache->data);
isc_rwlock_destroy(&cache->rwlock);
- cache->magic = 0;
isc_mem_putanddetach(&cache->mctx, cache, sizeof(*cache));
- *pcache = NULL;
}
isc_result_t