From: Mark Andrews Date: Mon, 2 Dec 2019 05:58:57 +0000 (+1100) Subject: lock access to fctx->nqueries X-Git-Tag: v9.15.7~14^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5589748ecac0b016c2221ba74249fbfbddf412b6;p=thirdparty%2Fbind9.git lock access to fctx->nqueries --- diff --git a/lib/dns/resolver.c b/lib/dns/resolver.c index 1ca37a8dc7f..9e625e79d53 100644 --- a/lib/dns/resolver.c +++ b/lib/dns/resolver.c @@ -1137,9 +1137,8 @@ resquery_destroy(resquery_t **queryp) { res = fctx->res; bucket = fctx->bucketnum; - fctx->nqueries--; - LOCK(&res->buckets[bucket].lock); + fctx->nqueries--; empty = fctx_decreference(query->fctx); UNLOCK(&res->buckets[bucket].lock); @@ -1937,6 +1936,7 @@ fctx_query(fetchctx_t *fctx, dns_adbaddrinfo_t *addrinfo, bool have_addr = false; unsigned int srtt; isc_dscp_t dscp = -1; + unsigned int bucketnum; FCTXTRACE("query"); @@ -2158,7 +2158,10 @@ fctx_query(fetchctx_t *fctx, dns_adbaddrinfo_t *addrinfo, fctx->querysent++; ISC_LIST_APPEND(fctx->queries, query, link); - query->fctx->nqueries++; + bucketnum = fctx->bucketnum; + LOCK(&res->buckets[bucketnum].lock); + fctx->nqueries++; + UNLOCK(&res->buckets[bucketnum].lock); if (isc_sockaddr_pf(&addrinfo->sockaddr) == PF_INET) inc_stats(res, dns_resstatscounter_queryv4); else