From: Mark Andrews Date: Thu, 12 Sep 2013 03:37:43 +0000 (+1000) Subject: 3647. [bug] Address a race condition when shutting down a zone. X-Git-Tag: v9.10.0a1~108 X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=76df835d59b4715dbd3346fd65114714a42495c9;p=thirdparty%2Fbind9.git 3647. [bug] Address a race condition when shutting down a zone. [RT #34750] --- diff --git a/CHANGES b/CHANGES index a2a2b00521f..660fce11406 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,6 @@ +3647. [bug] Address a race condition when shutting down a zone. + [RT #34750] + 3646. [bug] Journal filename string could be set incorrectly, causing garbage in log messages. [RT #34738] diff --git a/lib/dns/zone.c b/lib/dns/zone.c index 1cd0df9487f..0f632a05b47 100644 --- a/lib/dns/zone.c +++ b/lib/dns/zone.c @@ -1000,6 +1000,7 @@ zone_free(dns_zone_t *zone) { REQUIRE(zone->irefs == 0); REQUIRE(!LOCKED_ZONE(zone)); REQUIRE(zone->timer == NULL); + REQUIRE(zone->zmgr == NULL); /* * Managed objects. Order is important. @@ -1014,8 +1015,6 @@ zone_free(dns_zone_t *zone) { isc_task_detach(&zone->task); if (zone->loadtask != NULL) isc_task_detach(&zone->loadtask); - if (zone->zmgr != NULL) - dns_zonemgr_releasezone(zone->zmgr, zone); /* Unmanaged objects */ for (signing = ISC_LIST_HEAD(zone->signing); @@ -11753,6 +11752,7 @@ zone_shutdown(isc_task_t *task, isc_event_t *event) { zone->statelist = NULL; } RWUNLOCK(&zone->zmgr->rwlock, isc_rwlocktype_write); + dns_zonemgr_releasezone(zone->zmgr, zone); } /*