diff --git a/CHANGES b/CHANGES index 782ba0e7f7..9eb12b717b 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,6 @@ +4226. [bug] Address a theoretical shutdown race in + zone.c:notify_send_queue(). [RT #38958] + 4225. [port] freebsd/openbsd: Use '${CC} -shared' for building shared libraries. [RT #39557] diff --git a/lib/dns/zone.c b/lib/dns/zone.c index 85bc5eca45..2f691583c9 100644 --- a/lib/dns/zone.c +++ b/lib/dns/zone.c @@ -10518,6 +10518,9 @@ notify_send(dns_notify_t *notify) { REQUIRE(DNS_NOTIFY_VALID(notify)); REQUIRE(LOCKED_ZONE(notify->zone)); + if (DNS_ZONE_FLAG(notify->zone, DNS_ZONEFLG_EXITING)) + return; + for (ai = ISC_LIST_HEAD(notify->find->list); ai != NULL; ai = ISC_LIST_NEXT(ai, publink)) { @@ -10593,7 +10596,8 @@ zone_notify(dns_zone_t *zone, isc_time_t *now) { DNS_ZONE_TIME_ADD(now, zone->notifydelay, &zone->notifytime); UNLOCK_ZONE(zone); - if (! DNS_ZONE_FLAG(zone, DNS_ZONEFLG_LOADED)) + if (DNS_ZONE_FLAG(zone, DNS_ZONEFLG_EXITING) || + ! DNS_ZONE_FLAG(zone, DNS_ZONEFLG_LOADED)) return; if (notifytype == dns_notifytype_no)