From eb6b31b6f2cd209860e63e1ba14db4a617b409fc Mon Sep 17 00:00:00 2001 From: Tony Finch Date: Tue, 14 Feb 2023 16:52:26 +0000 Subject: [PATCH] Simplify locking in dns_view_detach() Lock just once, and shut down the resolver, adb, and requestmgr after unlocking, like the zone table, managed keys zone, and redirect zone. --- lib/dns/view.c | 38 +++++++++++++------------------------- 1 file changed, 13 insertions(+), 25 deletions(-) diff --git a/lib/dns/view.c b/lib/dns/view.c index 8311f129a3..4304934b51 100644 --- a/lib/dns/view.c +++ b/lib/dns/view.c @@ -522,36 +522,15 @@ dns_view_detach(dns_view_t **viewp) { if (view->resolver != NULL) { resolver = view->resolver; view->resolver = NULL; - UNLOCK(&view->lock); - - dns_resolver_shutdown(resolver); - dns_resolver_detach(&resolver); - - LOCK(&view->lock); } - if (view->adb != NULL) { adb = view->adb; view->adb = NULL; - UNLOCK(&view->lock); - - dns_adb_shutdown(adb); - dns_adb_detach(&adb); - - LOCK(&view->lock); } - if (view->requestmgr != NULL) { requestmgr = view->requestmgr; view->requestmgr = NULL; - UNLOCK(&view->lock); - - dns_requestmgr_shutdown(requestmgr); - dns_requestmgr_detach(&requestmgr); - - LOCK(&view->lock); } - if (view->zonetable != NULL) { zt = view->zonetable; view->zonetable = NULL; @@ -559,7 +538,6 @@ dns_view_detach(dns_view_t **viewp) { dns_zt_flush(zt); } } - if (view->managed_keys != NULL) { mkzone = view->managed_keys; view->managed_keys = NULL; @@ -582,15 +560,25 @@ dns_view_detach(dns_view_t **viewp) { } UNLOCK(&view->lock); - /* Need to detach zt and zones outside view lock */ + /* Detach outside view lock */ + if (resolver != NULL) { + dns_resolver_shutdown(resolver); + dns_resolver_detach(&resolver); + } + if (adb != NULL) { + dns_adb_shutdown(adb); + dns_adb_detach(&adb); + } + if (requestmgr != NULL) { + dns_requestmgr_shutdown(requestmgr); + dns_requestmgr_detach(&requestmgr); + } if (zt != NULL) { dns_zt_detach(&zt); } - if (mkzone != NULL) { dns_zone_detach(&mkzone); } - if (rdzone != NULL) { dns_zone_detach(&rdzone); }