diff --git a/lib/dns/view.c b/lib/dns/view.c index eb3195ca0e..4ad51dfffe 100644 --- a/lib/dns/view.c +++ b/lib/dns/view.c @@ -2457,25 +2457,37 @@ cleanup: void dns_view_setviewcommit(dns_view_t *view) { + dns_zone_t *redirect = NULL, *managed_keys = NULL; + REQUIRE(DNS_VIEW_VALID(view)); LOCK(&view->lock); if (view->redirect != NULL) { - dns_zone_setviewcommit(view->redirect); + dns_zone_attach(view->redirect, &redirect); } if (view->managed_keys != NULL) { - dns_zone_setviewcommit(view->managed_keys); + dns_zone_attach(view->managed_keys, &managed_keys); } if (view->zonetable != NULL) { dns_zt_setviewcommit(view->zonetable); } UNLOCK(&view->lock); + + if (redirect != NULL) { + dns_zone_setviewcommit(redirect); + dns_zone_detach(&redirect); + } + if (managed_keys != NULL) { + dns_zone_setviewcommit(managed_keys); + dns_zone_detach(&managed_keys); + } } void dns_view_setviewrevert(dns_view_t *view) { + dns_zone_t *redirect = NULL, *managed_keys = NULL; dns_zt_t *zonetable; REQUIRE(DNS_VIEW_VALID(view)); @@ -2486,14 +2498,22 @@ dns_view_setviewrevert(dns_view_t *view) { */ LOCK(&view->lock); if (view->redirect != NULL) { - dns_zone_setviewrevert(view->redirect); + dns_zone_attach(view->redirect, &redirect); } if (view->managed_keys != NULL) { - dns_zone_setviewrevert(view->managed_keys); + dns_zone_attach(view->managed_keys, &managed_keys); } zonetable = view->zonetable; UNLOCK(&view->lock); + if (redirect != NULL) { + dns_zone_setviewrevert(redirect); + dns_zone_detach(&redirect); + } + if (managed_keys != NULL) { + dns_zone_setviewrevert(managed_keys); + dns_zone_detach(&managed_keys); + } if (zonetable != NULL) { dns_zt_setviewrevert(zonetable); }