From 6834ea968e83a061a4305d998569e0145a18994b Mon Sep 17 00:00:00 2001 From: Aram Sargsyan Date: Thu, 2 Mar 2023 18:38:49 +0000 Subject: [PATCH] Revert "Process db callbacks in zone_loaddone() after zone_postload()" This reverts commit a7196470233d4d79c6998d94e87d5a574f841644. The commit introduced a data race, because dns_db_endload() is called after unfreezing the zone. (not cherry picked from commit 593dea871afe903fbff420be0ccb63c85152de4a) --- lib/dns/zone.c | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/lib/dns/zone.c b/lib/dns/zone.c index ba130b959e..c9bb345156 100644 --- a/lib/dns/zone.c +++ b/lib/dns/zone.c @@ -17843,6 +17843,13 @@ zone_loaddone(void *arg, isc_result_t result) { dns_zone_catz_disable_db(zone, load->db); } + tresult = dns_db_endload(load->db, &load->callbacks); + if (tresult != ISC_R_SUCCESS && + (result == ISC_R_SUCCESS || result == DNS_R_SEENINCLUDE)) + { + result = tresult; + } + /* * Lock hierarchy: zmgr, zone, raw. */ @@ -17861,14 +17868,10 @@ again: goto again; } } - tresult = zone_postload(zone, load->db, load->loadtime, result); - if (tresult != ISC_R_SUCCESS && - (result == ISC_R_SUCCESS || result == DNS_R_SEENINCLUDE)) - { - result = tresult; - } + (void)zone_postload(zone, load->db, load->loadtime, result); zonemgr_putio(&zone->readio); DNS_ZONE_CLRFLAG(zone, DNS_ZONEFLG_LOADING); + zone_idetach(&load->callbacks.zone); /* * Leave the zone frozen if the reload fails. */ @@ -17885,14 +17888,7 @@ again: } UNLOCK_ZONE(zone); - (void)dns_db_endload(load->db, &load->callbacks); - - LOCK_ZONE(zone); - zone_idetach(&load->callbacks.zone); - UNLOCK_ZONE(zone); - load->magic = 0; - dns_db_detach(&load->db); if (load->zone->lctx != NULL) { dns_loadctx_detach(&load->zone->lctx);