diff --git a/CHANGES b/CHANGES index 02a932688b..0b13795aa4 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,7 @@ +5034. [bug] A race between threads could prevent zone maintenance + scheduled immediately after zone load from being + performed. [GL #542] + 5033. [bug] When adding NTAs to multiple views using "rndc nta", the text returned via rndc was incorrectly terminated after the first line, making it look as if only one diff --git a/lib/dns/zone.c b/lib/dns/zone.c index e11398e63a..60545141c7 100644 --- a/lib/dns/zone.c +++ b/lib/dns/zone.c @@ -10006,7 +10006,7 @@ zone_maintenance(dns_zone_t *zone) { const char me[] = "zone_maintenance"; isc_time_t now; isc_result_t result; - bool dumping; + bool dumping, load_pending; REQUIRE(DNS_ZONE_VALID(zone)); ENTER; @@ -10014,8 +10014,13 @@ zone_maintenance(dns_zone_t *zone) { /* * Are we pending load/reload? */ - if (DNS_ZONE_FLAG(zone, DNS_ZONEFLG_LOADPENDING)) + LOCK_ZONE(zone); + load_pending = DNS_ZONE_FLAG(zone, DNS_ZONEFLG_LOADPENDING); + UNLOCK_ZONE(zone); + + if (load_pending) { return; + } /* * Configuring the view of this zone may have