From: Ondřej Surý Date: Tue, 23 Jul 2019 14:14:14 +0000 (-0400) Subject: Use C11 atomics for nfctx, kill unused dns_resolver_nrunning() X-Git-Tag: v9.15.8~10^2~11 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7dfc092f06442de12731e7a39c544501b80989f4;p=thirdparty%2Fbind9.git Use C11 atomics for nfctx, kill unused dns_resolver_nrunning() --- diff --git a/lib/dns/include/dns/resolver.h b/lib/dns/include/dns/resolver.h index 57fa237e584..c6b26914ede 100644 --- a/lib/dns/include/dns/resolver.h +++ b/lib/dns/include/dns/resolver.h @@ -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); diff --git a/lib/dns/resolver.c b/lib/dns/resolver.c index 6fce5cd6c9b..c56d320445f 100644 --- a/lib/dns/resolver.c +++ b/lib/dns/resolver.c @@ -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) { diff --git a/lib/dns/win32/libdns.def.in b/lib/dns/win32/libdns.def.in index d77368debbd..65c4a7ddeca 100644 --- a/lib/dns/win32/libdns.def.in +++ b/lib/dns/win32/libdns.def.in @@ -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