From: Ondřej Surý Date: Thu, 7 Apr 2022 13:40:38 +0000 (+0200) Subject: Don't destroy mctx and task pools until we are destroying zonemgr X-Git-Tag: v9.19.0~5^2 X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=f981b52793960bd56ac4fa092a5ef462eb7fa249;p=thirdparty%2Fbind9.git Don't destroy mctx and task pools until we are destroying zonemgr The mctx, zonetask and loadtask pools were being destroyed in the shutdown function where in theory a dangling zone could be still attached to it. Move the isc_mem_put() on the pools to the destroy() function. --- diff --git a/lib/dns/zone.c b/lib/dns/zone.c index 2ce42fcecac..76f6a01eefd 100644 --- a/lib/dns/zone.c +++ b/lib/dns/zone.c @@ -19139,24 +19139,18 @@ dns_zonemgr_shutdown(dns_zonemgr_t *zmgr) { for (size_t i = 0; i < zmgr->workers; i++) { isc_mem_detach(&zmgr->mctxpool[i]); } - isc_mem_put(zmgr->mctx, zmgr->mctxpool, - zmgr->workers * sizeof(zmgr->mctxpool[0])); for (size_t i = 0; i < zmgr->workers; i++) { if (zmgr->loadtasks[i] != NULL) { isc_task_detach(&zmgr->loadtasks[i]); } } - isc_mem_put(zmgr->mctx, zmgr->loadtasks, - zmgr->workers * sizeof(zmgr->loadtasks[0])); for (size_t i = 0; i < zmgr->workers; i++) { if (zmgr->zonetasks[i] != NULL) { isc_task_detach(&zmgr->zonetasks[i]); } } - isc_mem_put(zmgr->mctx, zmgr->zonetasks, - zmgr->workers * sizeof(zmgr->zonetasks[0])); RWLOCK(&zmgr->rwlock, isc_rwlocktype_read); for (zone = ISC_LIST_HEAD(zmgr->zones); zone != NULL; @@ -19185,6 +19179,13 @@ zonemgr_free(dns_zonemgr_t *zmgr) { isc_ratelimiter_detach(&zmgr->startupnotifyrl); isc_ratelimiter_detach(&zmgr->startuprefreshrl); + isc_mem_put(zmgr->mctx, zmgr->mctxpool, + zmgr->workers * sizeof(zmgr->mctxpool[0])); + isc_mem_put(zmgr->mctx, zmgr->loadtasks, + zmgr->workers * sizeof(zmgr->loadtasks[0])); + isc_mem_put(zmgr->mctx, zmgr->zonetasks, + zmgr->workers * sizeof(zmgr->zonetasks[0])); + isc_rwlock_destroy(&zmgr->urlock); isc_rwlock_destroy(&zmgr->rwlock);