mirror of
https://github.com/isc-projects/bind9.git
synced 2026-06-09 07:52:15 -04:00
Add dns_view_delzone
dns_view_delzone performs the rcu locking required around accessing view->zonetable.
This commit is contained in:
parent
ad747976bb
commit
e0f41259bd
3 changed files with 34 additions and 5 deletions
|
|
@ -2856,7 +2856,7 @@ catz_addmodzone_cb(void *arg) {
|
|||
}
|
||||
|
||||
/* Remove the zone from the zone table */
|
||||
dns_zt_unmount(cz->view->zonetable, zone);
|
||||
dns_view_delzone(cz->view, zone);
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
|
|
@ -2925,7 +2925,7 @@ catz_delzone_cb(void *arg) {
|
|||
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);
|
||||
|
|
@ -13551,7 +13551,7 @@ do_addzone(named_server_t *server, ns_cfgctx_t *cfg, dns_view_t *view,
|
|||
}
|
||||
|
||||
/* Remove the zone from the zone table */
|
||||
dns_zt_unmount(view->zonetable, zone);
|
||||
dns_view_delzone(view, zone);
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
|
|
@ -13759,7 +13759,7 @@ do_modzone(named_server_t *server, ns_cfgctx_t *cfg, dns_view_t *view,
|
|||
}
|
||||
|
||||
/* Remove the zone from the zone table */
|
||||
dns_zt_unmount(view->zonetable, zone);
|
||||
dns_view_delzone(view, zone);
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
|
|
@ -14147,7 +14147,7 @@ named_server_delzone(named_server_t *server, isc_lex_t *lex,
|
|||
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 */
|
||||
|
|
|
|||
|
|
@ -493,6 +493,16 @@ dns_view_addzone(dns_view_t *view, dns_zone_t *zone);
|
|||
*\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);
|
||||
/*%<
|
||||
|
|
|
|||
|
|
@ -787,6 +787,25 @@ dns_view_addzone(dns_view_t *view, dns_zone_t *zone) {
|
|||
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) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue