mirror of
https://github.com/isc-projects/bind9.git
synced 2026-06-11 10:29:59 -04:00
Fix an ADB quota management error in the resolver
Normally, when a 'resquery_t' object is created in fctx_query(),
we call dns_adb_beginudpfetch() (which increases the ADB quota)
only if it's a UDP query. Then, in fctx_cancelquery(), we call
dns_adb_endudpfetch() to decreases back the ADB quota, again only
if it's a UDP query.
The problem is that a UDP query can become a TCP query, preventing
the quota from adjusting back in fctx_cancelquery() later.
Call dns_adb_beginudpfetch() also when switching the query type
from UDP to TCP.
(cherry picked from commit 53afe1f978)
This commit is contained in:
parent
650f3098e1
commit
926f0323b6
1 changed files with 10 additions and 1 deletions
|
|
@ -2633,7 +2633,16 @@ resquery_send(resquery_t *query) {
|
|||
hint = dns_adb_getudpsize(fctx->adb,
|
||||
query->addrinfo);
|
||||
} else if (tried->count >= 2U) {
|
||||
query->options |= DNS_FETCHOPT_TCP;
|
||||
if ((query->options & DNS_FETCHOPT_TCP) == 0) {
|
||||
/*
|
||||
* Inform the ADB that we're ending a
|
||||
* UDP fetch, and turn the query into
|
||||
* a TCP query.
|
||||
*/
|
||||
dns_adb_endudpfetch(fctx->adb,
|
||||
query->addrinfo);
|
||||
query->options |= DNS_FETCHOPT_TCP;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue