mirror of
https://github.com/isc-projects/bind9.git
synced 2026-06-11 09:20:01 -04:00
Prepare a zone for shutting down when deleting it from a view
After b171cacf4f, a zone object can
remain in the memory for a while, until garbage collection is run.
Setting the DNS_ZONEFLG_EXITING flag should prevent the zone
maintenance function from running while it's in that state.
Otherwise, a secondary zone could initiate a zone transfer after
it had been deleted.
This commit is contained in:
parent
610825ebc1
commit
874ca5ca2f
3 changed files with 25 additions and 0 deletions
|
|
@ -1718,6 +1718,20 @@ dns_zone_findkeys(dns_zone_t *zone, dns_db_t *db, dns_dbversion_t *ver,
|
|||
*\li Error
|
||||
*/
|
||||
|
||||
void
|
||||
dns_zone_prepare_shutdown(dns_zone_t *zone);
|
||||
/*%<
|
||||
* Prepare a zone for shutdown by setting the DNS_ZONEFLG_EXITING flag even
|
||||
* before the final reference is detached. Useful, because the zone object can
|
||||
* be kept around with a valid reference from the zonetable until qp garbage
|
||||
* collector runs, and we don't want, for example, zone maintenance to happen
|
||||
* while waiting for it. Note that the zone can not be used normally again after
|
||||
* this function is called.
|
||||
*
|
||||
* Requires:
|
||||
*\li 'zone' to be a valid initialised zone.
|
||||
*/
|
||||
|
||||
void
|
||||
dns_zonemgr_create(isc_mem_t *mctx, isc_nm_t *netmgr, dns_zonemgr_t **zmgrp);
|
||||
/*%<
|
||||
|
|
|
|||
|
|
@ -711,6 +711,8 @@ dns_view_delzone(dns_view_t *view, dns_zone_t *zone) {
|
|||
|
||||
REQUIRE(DNS_VIEW_VALID(view));
|
||||
|
||||
dns_zone_prepare_shutdown(zone);
|
||||
|
||||
rcu_read_lock();
|
||||
zonetable = rcu_dereference(view->zonetable);
|
||||
if (zonetable != NULL) {
|
||||
|
|
|
|||
|
|
@ -6545,6 +6545,15 @@ failure:
|
|||
return result;
|
||||
}
|
||||
|
||||
void
|
||||
dns_zone_prepare_shutdown(dns_zone_t *zone) {
|
||||
REQUIRE(DNS_ZONE_VALID(zone));
|
||||
|
||||
LOCK_ZONE(zone);
|
||||
DNS_ZONE_SETFLAG(zone, DNS_ZONEFLG_EXITING);
|
||||
UNLOCK_ZONE(zone);
|
||||
}
|
||||
|
||||
/*%
|
||||
* Find DNSSEC keys used for signing zone with dnssec-policy. Load these keys
|
||||
* into 'keys'. Requires KASP to be locked.
|
||||
|
|
|
|||
Loading…
Reference in a new issue