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)