From 9ff296afebeabc56bb7ff90051547ce35a8d39d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Witold=20Kr=C4=99cicki?= Date: Fri, 29 Mar 2019 14:30:40 +0100 Subject: [PATCH] In resume_qmin check if the fetch context is already shutting down - if so, try to destroy it, don't continue (cherry picked from commit 7c960e89eac2fae57c4c732559d5c8d6db44d65a) --- lib/dns/resolver.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/dns/resolver.c b/lib/dns/resolver.c index e7567852d6..3241edb75f 100644 --- a/lib/dns/resolver.c +++ b/lib/dns/resolver.c @@ -4104,7 +4104,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; @@ -4137,6 +4136,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 @@ -4219,8 +4223,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)