]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Clean up isc_tlsctx_cache_detach()
authorEvan Hunt <each@isc.org>
Tue, 4 Jan 2022 21:02:44 +0000 (13:02 -0800)
committerEvan Hunt <each@isc.org>
Wed, 5 Jan 2022 07:07:12 +0000 (23:07 -0800)
For consistency with similar functions, rename `pcache` to `cachep`,
call a separate destroy function when references reach 0, and add
a missing call to isc_refcount_destroy().

lib/isc/include/isc/tls.h
lib/isc/tls.c

index ec7382901d842ddc6a2ec3511a807c7dc02034b1..e79e40e12deea701e1cbfd6d3551715ceea9e3d6 100644 (file)
@@ -240,13 +240,13 @@ isc_tlsctx_cache_attach(isc_tlsctx_cache_t  *source,
  */
 
 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
index 2cc237997b6b0da8b8ceb4605d805a786889e16f..cc2882de95584981bd8aba4a966995ea02eb5d48 100644 (file)
@@ -961,25 +961,15 @@ tlsctx_cache_entry_destroy(isc_mem_t *mctx, isc_tlsctx_cache_entry_t *entry) {
        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))
@@ -991,11 +981,26 @@ isc_tlsctx_cache_detach(isc_tlsctx_cache_t **pcache) {
 
        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,