From 139bc2c6abdadc584fb53becdb0a7885160afc0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20K=C4=99pie=C5=84?= Date: Mon, 29 Oct 2018 22:29:31 +0100 Subject: [PATCH] Release all resources when shutting down an RPZ zone during an update If an RPZ zone is to be freed during an update, canceling the update_quantum() event is not enough because the resources released when an update completes also need to be accounted for. Failure to do this results in a hang upon shutdown. Fix by copying cleanup code from the end of update_quantum() to rpz_detach(). --- lib/dns/rpz.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/dns/rpz.c b/lib/dns/rpz.c index fa8b3d4491..d861783e86 100644 --- a/lib/dns/rpz.c +++ b/lib/dns/rpz.c @@ -2112,6 +2112,14 @@ rpz_detach(dns_rpz_zone_t **rpzp, dns_rpz_zones_t *rpzs) { } if (rpz->updaterunning) { isc_task_purgeevent(rpz->rpzs->updater, &rpz->updateevent); + if (rpz->updbit != NULL) { + dns_dbiterator_destroy(&rpz->updbit); + } + if (rpz->newnodes != NULL) { + isc_ht_destroy(&rpz->newnodes); + } + dns_db_closeversion(rpz->updb, &rpz->updbversion, false); + dns_db_detach(&rpz->updb); } isc_timer_reset(rpz->updatetimer, isc_timertype_inactive,