From: Evan Hunt Date: Tue, 29 Sep 2015 22:27:12 +0000 (-0700) Subject: [master] fix theoretical shutdown race X-Git-Tag: v9.11.0a1~414 X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=40c619daeeb99015afa31b1a4a76d6c20b0a3fc6;p=thirdparty%2Fbind9.git [master] fix theoretical shutdown race 4226. [bug] Address a theoretical shutdown race in zone.c:notify_send_queue(). [RT #38958] --- diff --git a/CHANGES b/CHANGES index 782ba0e7f79..9eb12b717b6 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 85bc5eca45c..2f691583c90 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)