diff --git a/lib/dns/zone.c b/lib/dns/zone.c index eab42bf8c0..cd471738da 100644 --- a/lib/dns/zone.c +++ b/lib/dns/zone.c @@ -18675,8 +18675,6 @@ dns_zonemgr_managezone(dns_zonemgr_t *zmgr, dns_zone_t *zone) { void dns_zonemgr_releasezone(dns_zonemgr_t *zmgr, dns_zone_t *zone) { - bool free_now = false; - REQUIRE(DNS_ZONE_VALID(zone)); REQUIRE(DNS_ZONEMGR_VALID(zmgr)); REQUIRE(zone->zmgr == zmgr); @@ -18691,19 +18689,13 @@ dns_zonemgr_releasezone(dns_zonemgr_t *zmgr, dns_zone_t *zone) { ENSURE(zone->kfio == NULL); } + /* Detach below, outside of the write lock. */ zone->zmgr = NULL; - if (isc_refcount_decrement(&zmgr->refs) == 1) { - free_now = true; - } - UNLOCK_ZONE(zone); RWUNLOCK(&zmgr->rwlock, isc_rwlocktype_write); - if (free_now) { - zonemgr_free(zmgr); - } - ENSURE(zone->zmgr == NULL); + dns_zonemgr_detach(&zmgr); } void