mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-08-30 14:07:59 +00:00
When a forwarder fails and we're not in a forward-only mode we
go back to regular resolution. When this happens the fetch timer is already running, and we might end up in a situation where we we create a fetch for qname-minimized query and after that the timer is triggered and the query is retried (fctx_try) - which causes relaunching of qname-minimization fetch - and since we already have a qmin fetch for this fctx - assertion failure. This fix stops the timer when doing qname minimization - qmin fetch internal timer should take care of all the possible timeouts.
This commit is contained in:
committed by
Evan Hunt
parent
bbb0947ee1
commit
cfa2804e5a
4
CHANGES
4
CHANGES
@@ -1,3 +1,7 @@
|
|||||||
|
5138. [bug] Under some circumstances named could hit an assertion
|
||||||
|
failure when doing qname minimization when using
|
||||||
|
forwarders. [GL #797]
|
||||||
|
|
||||||
5137. [func] named now logs messages whenever a mirror zone becomes
|
5137. [func] named now logs messages whenever a mirror zone becomes
|
||||||
usable or unusable for resolution purposes. [GL #818]
|
usable or unusable for resolution purposes. [GL #818]
|
||||||
|
|
||||||
|
@@ -4040,9 +4040,11 @@ fctx_try(fetchctx_t *fctx, bool retrying, bool badcache) {
|
|||||||
options &= ~DNS_FETCHOPT_QMINIMIZE;
|
options &= ~DNS_FETCHOPT_QMINIMIZE;
|
||||||
fctx_increference(fctx);
|
fctx_increference(fctx);
|
||||||
task = res->buckets[bucketnum].task;
|
task = res->buckets[bucketnum].task;
|
||||||
|
fctx_stoptimer(fctx);
|
||||||
result = dns_resolver_createfetch(fctx->res, &fctx->qminname,
|
result = dns_resolver_createfetch(fctx->res, &fctx->qminname,
|
||||||
fctx->qmintype, &fctx->domain,
|
fctx->qmintype, &fctx->domain,
|
||||||
&fctx->nameservers, NULL, NULL, 0,
|
&fctx->nameservers,
|
||||||
|
NULL, NULL, 0,
|
||||||
options, 0, fctx->qc, task,
|
options, 0, fctx->qc, task,
|
||||||
resume_qmin, fctx,
|
resume_qmin, fctx,
|
||||||
&fctx->qminrrset, NULL,
|
&fctx->qminrrset, NULL,
|
||||||
@@ -4371,13 +4373,12 @@ fctx_timeout(isc_task_t *task, isc_event_t *event) {
|
|||||||
* timer.
|
* timer.
|
||||||
*/
|
*/
|
||||||
result = fctx_starttimer(fctx);
|
result = fctx_starttimer(fctx);
|
||||||
if (result != ISC_R_SUCCESS)
|
if (result != ISC_R_SUCCESS) {
|
||||||
fctx_done(fctx, result, __LINE__);
|
fctx_done(fctx, result, __LINE__);
|
||||||
else
|
} else {
|
||||||
/*
|
/* Keep trying */
|
||||||
* Keep trying.
|
|
||||||
*/
|
|
||||||
fctx_try(fctx, true, false);
|
fctx_try(fctx, true, false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
isc_event_free(&event);
|
isc_event_free(&event);
|
||||||
|
Reference in New Issue
Block a user