From: Witold Kręcicki Date: Fri, 29 Mar 2019 13:30:40 +0000 (+0100) Subject: In resume_qmin check if the fetch context is already shutting down - if so, try to... X-Git-Tag: v9.15.0~60^2~1 X-Git-Url: http://git.ipfire.org/gitweb/index.cgi?a=commitdiff_plain;h=7c960e89eac2fae57c4c732559d5c8d6db44d65a;p=thirdparty%2Fbind9.git In resume_qmin check if the fetch context is already shutting down - if so, try to destroy it, don't continue --- diff --git a/lib/dns/resolver.c b/lib/dns/resolver.c index cd0c8f84c33..e4294ec4e62 100644 --- a/lib/dns/resolver.c +++ b/lib/dns/resolver.c @@ -4102,7 +4102,6 @@ resume_qmin(isc_task_t *task, isc_event_t *event) { fetchctx_t *fctx; isc_result_t result; bool bucket_empty; - bool locked = false; unsigned int bucketnum; unsigned int findoptions = 0; dns_name_t *fname, *dcname; @@ -4135,6 +4134,11 @@ resume_qmin(isc_task_t *task, isc_event_t *event) { dns_resolver_destroyfetch(&fctx->qminfetch); + if (SHUTTINGDOWN(fctx)) { + maybe_destroy(fctx, false); + goto cleanup; + } + /* * Note: fevent->rdataset must be disassociated and * isc_event_free(&event) be called before resuming @@ -4217,8 +4221,7 @@ resume_qmin(isc_task_t *task, isc_event_t *event) { cleanup: INSIST(event == NULL); INSIST(fevent == NULL); - if (!locked) - LOCK(&res->buckets[bucketnum].lock); + LOCK(&res->buckets[bucketnum].lock); bucket_empty = fctx_decreference(fctx); UNLOCK(&res->buckets[bucketnum].lock); if (bucket_empty)