]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
In resume_qmin check if the fetch context is already shutting down - if so, try to...
authorWitold Kręcicki <wpk@isc.org>
Fri, 29 Mar 2019 13:30:40 +0000 (14:30 +0100)
committerWitold Kręcicki <wpk@isc.org>
Fri, 29 Mar 2019 13:30:40 +0000 (14:30 +0100)
lib/dns/resolver.c

index cd0c8f84c33625a71ddbb54d53bfddef28b833e4..e4294ec4e620f388f1028bffeb618abd572065ee 100644 (file)
@@ -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)