]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Use C11 atomics for nfctx, kill unused dns_resolver_nrunning()
authorOndřej Surý <ondrej@sury.org>
Tue, 23 Jul 2019 14:14:14 +0000 (10:14 -0400)
committerOndřej Surý <ondrej@sury.org>
Tue, 14 Jan 2020 12:12:13 +0000 (13:12 +0100)
lib/dns/include/dns/resolver.h
lib/dns/resolver.c
lib/dns/win32/libdns.def.in

index 57fa237e584dbcc85b4025274150d098caf3c6f6..c6b26914ededb9dc2b9db5bff8443d6af4e0ba2c 100644 (file)
@@ -440,16 +440,6 @@ dns_resolver_setlamettl(dns_resolver_t *resolver, uint32_t lame_ttl);
  *\li  'resolver' to be valid.
  */
 
-unsigned int
-dns_resolver_nrunning(dns_resolver_t *resolver);
-/*%<
- * Return the number of currently running resolutions in this
- * resolver.  This is may be less than the number of outstanding
- * fetches due to multiple identical fetches, or more than the
- * number of of outstanding fetches due to the fact that resolution
- * can continue even though a fetch has been canceled.
- */
-
 isc_result_t
 dns_resolver_addalternate(dns_resolver_t *resolver, const isc_sockaddr_t *alt,
                          const dns_name_t *name, in_port_t port);
index 6fce5cd6c9b0eeb377da422736598dc6c458d134..c56d320445f4f48afe8ba3ee3aacb473e77794de 100644 (file)
@@ -539,7 +539,7 @@ struct dns_resolver {
        dns_fetch_t *                   primefetch;
 
        /* Atomic. */
-       isc_refcount_t                  nfctx;
+       atomic_uint_fast32_t            nfctx;
 };
 
 #define RES_MAGIC                      ISC_MAGIC('R', 'e', 's', '!')
@@ -4322,7 +4322,7 @@ fctx_unlink(fetchctx_t *fctx) {
 
        ISC_LIST_UNLINK(res->buckets[bucketnum].fctxs, fctx, link);
 
-       isc_refcount_decrement(&res->nfctx);
+       REQUIRE(atomic_fetch_sub_release(&res->nfctx, 1) > 0);
 
        dec_stats(res, dns_resstatscounter_nfetch);
 
@@ -4650,7 +4650,7 @@ fctx_start(isc_task_t *task, isc_event_t *event) {
                else
                        fctx_try(fctx, false, false);
        } else if (dodestroy) {
-                       fctx_destroy(fctx);
+               fctx_destroy(fctx);
                if (bucket_empty)
                        empty_bucket(res);
        }
@@ -5015,7 +5015,7 @@ fctx_create(dns_resolver_t *res, const dns_name_t *name, dns_rdatatype_t type,
 
        ISC_LIST_APPEND(res->buckets[bucketnum].fctxs, fctx, link);
 
-       isc_refcount_increment(&res->nfctx);
+       REQUIRE(atomic_fetch_add_relaxed(&res->nfctx, 1) < UINT32_MAX);
 
        inc_stats(res, dns_resstatscounter_nfetch);
 
@@ -6986,7 +6986,7 @@ static void
 fctx_increference(fetchctx_t *fctx) {
        REQUIRE(VALID_FCTX(fctx));
 
-       isc_refcount_increment(&fctx->references);
+       isc_refcount_increment0(&fctx->references);
 }
 
 /*
@@ -9799,7 +9799,7 @@ destroy(dns_resolver_t *res) {
 
        RTRACE("destroy");
 
-       isc_refcount_destroy(&res->nfctx);
+       REQUIRE(atomic_load_acquire(&res->nfctx) == 0);
 
        isc_mutex_destroy(&res->primelock);
        isc_mutex_destroy(&res->lock);
@@ -10045,7 +10045,7 @@ dns_resolver_create(dns_view_t *view,
        res->priming = false;
        res->primefetch = NULL;
 
-       isc_refcount_init(&res->nfctx, 0);
+       atomic_init(&res->nfctx, 0);
 
        isc_mutex_init(&res->lock);
        isc_mutex_init(&res->primelock);
@@ -10805,11 +10805,6 @@ dns_resolver_setlamettl(dns_resolver_t *resolver, uint32_t lame_ttl) {
        resolver->lame_ttl = lame_ttl;
 }
 
-unsigned int
-dns_resolver_nrunning(dns_resolver_t *resolver) {
-       return (isc_refcount_current(&resolver->nfctx));
-}
-
 isc_result_t
 dns_resolver_addalternate(dns_resolver_t *resolver, const isc_sockaddr_t *alt,
                          const dns_name_t *name, in_port_t port) {
index d77368debbd458198a08361abe57071386ec5004..65c4a7ddecac3e1d05134a83a03e7b220aa8d97e 100644 (file)
@@ -933,7 +933,6 @@ dns_resolver_gettimeout
 dns_resolver_getudpsize
 dns_resolver_getzeronosoattl
 dns_resolver_logfetch
-dns_resolver_nrunning
 dns_resolver_prime
 dns_resolver_printbadcache
 dns_resolver_reset_algorithms