From f981b52793960bd56ac4fa092a5ef462eb7fa249 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Sur=C3=BD?= Date: Thu, 7 Apr 2022 15:40:38 +0200 Subject: [PATCH] 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. --- lib/dns/zone.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/lib/dns/zone.c b/lib/dns/zone.c index 2ce42fceca..76f6a01eef 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);