mirror of
https://github.com/isc-projects/bind9.git
synced 2026-06-14 04:00:00 -04:00
Shutdown the fetch context after canceling the last fetch
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.
This commit is contained in:
parent
0673568c17
commit
9f945c8b67
1 changed files with 9 additions and 4 deletions
|
|
@ -10584,6 +10584,7 @@ fail:
|
|||
void
|
||||
dns_resolver_cancelfetch(dns_fetch_t *fetch) {
|
||||
fetchctx_t *fctx = NULL;
|
||||
bool last_fetch = false;
|
||||
|
||||
REQUIRE(DNS_FETCH_VALID(fetch));
|
||||
fctx = fetch->private;
|
||||
|
|
@ -10614,11 +10615,15 @@ dns_resolver_cancelfetch(dns_fetch_t *fetch) {
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* The fctx continues running even if no fetches remain;
|
||||
* the answer is still cached.
|
||||
*/
|
||||
if (ISC_LIST_EMPTY(fctx->resps)) {
|
||||
last_fetch = true;
|
||||
}
|
||||
UNLOCK(&fctx->lock);
|
||||
|
||||
if (last_fetch) {
|
||||
fetchctx_ref(fctx);
|
||||
isc_async_run(fctx->loop, fctx_shutdown, fctx);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
Loading…
Reference in a new issue