mirror of
https://github.com/isc-projects/bind9.git
synced 2026-05-28 04:34:54 -04:00
Merge branch '3801-reduce-memory-bloat-caused-by-delayed-view-detach-lock-order-inversion-v9_18' into 'v9_18'
[9.18] Detach the zone views outside of the zone lock See merge request isc-projects/bind9!7408
This commit is contained in:
commit
1f6d54d1fb
1 changed files with 18 additions and 7 deletions
|
|
@ -14976,6 +14976,7 @@ zone_shutdown(isc_task_t *task, isc_event_t *event) {
|
|||
dns_zone_t *zone = (dns_zone_t *)event->ev_arg;
|
||||
bool free_needed, linked = false;
|
||||
dns_zone_t *raw = NULL, *secure = NULL;
|
||||
dns_view_t *view = NULL, *prev_view = NULL;
|
||||
|
||||
UNUSED(task);
|
||||
REQUIRE(DNS_ZONE_VALID(zone));
|
||||
|
|
@ -15023,13 +15024,15 @@ zone_shutdown(isc_task_t *task, isc_event_t *event) {
|
|||
LOCK_ZONE(zone);
|
||||
INSIST(zone != zone->raw);
|
||||
|
||||
/* Detach the views early, we don't need them anymore */
|
||||
if (zone->view != NULL) {
|
||||
dns_view_weakdetach(&zone->view);
|
||||
}
|
||||
if (zone->prev_view != NULL) {
|
||||
dns_view_weakdetach(&zone->prev_view);
|
||||
}
|
||||
/*
|
||||
* Detach the views early, we don't need them anymore. However, we need
|
||||
* to detach them outside of the zone lock to break the lock loop
|
||||
* between view, adb and zone locks.
|
||||
*/
|
||||
view = zone->view;
|
||||
zone->view = NULL;
|
||||
prev_view = zone->prev_view;
|
||||
zone->prev_view = NULL;
|
||||
|
||||
if (linked) {
|
||||
isc_refcount_decrement(&zone->irefs);
|
||||
|
|
@ -15091,6 +15094,14 @@ zone_shutdown(isc_task_t *task, isc_event_t *event) {
|
|||
zone->secure = NULL;
|
||||
}
|
||||
UNLOCK_ZONE(zone);
|
||||
|
||||
if (view != NULL) {
|
||||
dns_view_weakdetach(&view);
|
||||
}
|
||||
if (prev_view != NULL) {
|
||||
dns_view_weakdetach(&prev_view);
|
||||
}
|
||||
|
||||
if (raw != NULL) {
|
||||
dns_zone_detach(&raw);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue