}
/* Remove the zone from the zone table */
- dns_zt_unmount(cz->view->zonetable, zone);
+ dns_view_delzone(cz->view, zone);
goto cleanup;
}
dns_zone_unload(zone);
}
- CHECK(dns_zt_unmount(cz->view->zonetable, zone));
+ CHECK(dns_view_delzone(cz->view, zone));
file = dns_zone_getfile(zone);
if (file != NULL) {
isc_file_remove(file);
}
/* Remove the zone from the zone table */
- dns_zt_unmount(view->zonetable, zone);
+ dns_view_delzone(view, zone);
goto cleanup;
}
}
/* Remove the zone from the zone table */
- dns_zt_unmount(view->zonetable, zone);
+ dns_view_delzone(view, zone);
goto cleanup;
}
if (dns_zone_gettype(zone) == dns_zone_redirect) {
dns_zone_detach(&view->redirect);
} else {
- CHECK(dns_zt_unmount(view->zonetable, zone));
+ CHECK(dns_view_delzone(view, zone));
}
/* Send cleanup event */
*\li 'zone' is a valid zone.
*/
+isc_result_t
+dns_view_delzone(dns_view_t *view, dns_zone_t *zone);
+/*%<
+ * Removes zone 'zone' from 'view'.
+ *
+ * Requires:
+ *
+ *\li 'zone' is a valid zone.
+ */
+
void
dns_view_freeze(dns_view_t *view);
/*%<
return (result);
}
+isc_result_t
+dns_view_delzone(dns_view_t *view, dns_zone_t *zone) {
+ isc_result_t result;
+ dns_zt_t *zonetable = NULL;
+
+ REQUIRE(DNS_VIEW_VALID(view));
+
+ rcu_read_lock();
+ zonetable = rcu_dereference(view->zonetable);
+ if (zonetable != NULL) {
+ result = dns_zt_unmount(zonetable, zone);
+ } else {
+ result = ISC_R_SUCCESS;
+ }
+ rcu_read_unlock();
+
+ return (result);
+}
+
isc_result_t
dns_view_findzone(dns_view_t *view, const dns_name_t *name,
dns_zone_t **zonep) {