]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Release all resources when shutting down an RPZ zone during an update
authorMichał Kępień <michal@isc.org>
Mon, 29 Oct 2018 21:29:31 +0000 (22:29 +0100)
committerWitold Kręcicki <wpk@isc.org>
Mon, 29 Oct 2018 22:04:00 +0000 (23:04 +0100)
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

index fa8b3d4491e3a0960146dbfabe5cad6d689d9277..d861783e86df12fcbcb03ca8e898da113ae39bed 100644 (file)
@@ -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,