mirror of
https://github.com/isc-projects/bind9.git
synced 2026-05-28 04:34:54 -04:00
Fix a zone refresh bug in zone.c:refresh_callback()
When the zone.c:refresh_callback() callback function is called during a SOA request before a zone transfer, it can receive a ISC_R_SHUTTINGDOWN result for the sent request when named is shutting down, and in that case it just destroys the request and finishes the ongoing transfer, without clearing the DNS_ZONEFLG_REFRESH flag of the zone. This is alright when named is going to shutdown, but currently the callback can get a ISC_R_SHUTTINGDOWN result also when named is reconfigured during the ongoibg SOA request. In that case, leaving the DNS_ZONEFLG_REFRESH flag set results in the zone never being able to refresh again, because any new attempts will be caneled while the flag is set. Clear the DNS_ZONEFLG_REFRESH flag on the 'exiting' error path of the callback function.
This commit is contained in:
parent
08133582b0
commit
228e441328
1 changed files with 11 additions and 0 deletions
|
|
@ -14283,6 +14283,17 @@ next_primary:
|
|||
goto detach;
|
||||
|
||||
exiting:
|
||||
/*
|
||||
* We can get here not only during shutdown, but also when the refresh
|
||||
* is canceled during reconfiguration. In that case, make sure to clear
|
||||
* the DNS_ZONEFLG_REFRESH flag so that future zone refreshes don't get
|
||||
* stuck, and make sure a new refresh attempt is made again soon after
|
||||
* the reconfiguration is complete.
|
||||
*/
|
||||
DNS_ZONE_CLRFLAG(zone, DNS_ZONEFLG_REFRESH);
|
||||
zone->refreshtime = now;
|
||||
zone_settimer(zone, &now);
|
||||
|
||||
dns_request_destroy(&zone->request);
|
||||
goto detach;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue