]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Shutdown the fetch context after canceling the last fetch
authorOndřej Surý <ondrej@isc.org>
Wed, 15 Jan 2025 12:02:20 +0000 (13:02 +0100)
committerOndřej Surý <ondrej@isc.org>
Wed, 22 Jan 2025 13:21:51 +0000 (14:21 +0100)
Currently, the fetch context will continue running even when the last
fetch (response) has been removed from the context, so named can process
and cache the answer.  This can lead to a situation where the number of
outgoing recursing clients exceeds the the configured number for
recursive-clients.

Be more stringent about the recursive-clients limit and shutdown the
fetch context immediately after the last fetch has been canceled from
that particular fetch context.

lib/dns/resolver.c

index bc2d0bd519d5940f0449c97189ae38bbe9468dc0..e612eb7bb3e96b17e6cfa0fc13b699d0d2ee8770 100644 (file)
@@ -11210,10 +11210,9 @@ dns_resolver_cancelfetch(dns_fetch_t *fetch) {
                isc_task_sendanddetach(&etask, ISC_EVENT_PTR(&event_fetchdone));
        }
 
-       /*
-        * The fctx continues running even if no fetches remain;
-        * the answer is still cached.
-        */
+       if (ISC_LIST_EMPTY(fctx->events)) {
+               fctx_shutdown(fctx);
+       }
        UNLOCK(&res->buckets[fctx->bucketnum].lock);
 }