*/
void
-isc_tlsctx_cache_detach(isc_tlsctx_cache_t **pcache);
+isc_tlsctx_cache_detach(isc_tlsctx_cache_t **cachep);
/*%<
* Remove a reference to the TLS context cache object.
*
* Requires:
- *\li 'pcache' is a valid pointer to a pointer which must point to a
- * valid TLS context cache object.
+ *\li 'cachep' is a pointer to a pointer to a valid TLS
+ * context cache object.
*/
isc_result_t
isc_mem_put(mctx, entry, sizeof(*entry));
}
-void
-isc_tlsctx_cache_detach(isc_tlsctx_cache_t **pcache) {
- isc_tlsctx_cache_t *cache = NULL;
+static void
+tlsctx_cache_destroy(isc_tlsctx_cache_t *cache) {
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;
+ isc_refcount_destroy(&cache->references);
+
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_destroy(&it);
isc_ht_destroy(&cache->data);
-
isc_rwlock_destroy(&cache->rwlock);
isc_mem_putanddetach(&cache->mctx, cache, sizeof(*cache));
}
+void
+isc_tlsctx_cache_detach(isc_tlsctx_cache_t **cachep) {
+ isc_tlsctx_cache_t *cache = NULL;
+
+ REQUIRE(cachep != NULL);
+
+ cache = *cachep;
+ *cachep = NULL;
+
+ REQUIRE(VALID_TLSCTX_CACHE(cache));
+
+ if (isc_refcount_decrement(&cache->references) == 1) {
+ tlsctx_cache_destroy(cache);
+ }
+}
+
isc_result_t
isc_tlsctx_cache_add(isc_tlsctx_cache_t *cache, const char *name,
const isc_tlsctx_cache_transport_t transport,