mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-08-31 14:35:26 +00:00
Destroy task first when destroying rpzs.
When freeing rpzs structures we need to kill the updater task first. Otherwise we might race with the updater and there might be a crash on shutdown.
This commit is contained in:
committed by
Ondřej Surý
parent
faa52a704f
commit
541872bf3b
@@ -2148,7 +2148,12 @@ dns_rpz_detach_rpzs(dns_rpz_zones_t **rpzsp) {
|
|||||||
*rpzsp = NULL;
|
*rpzsp = NULL;
|
||||||
|
|
||||||
if (isc_refcount_decrement(&rpzs->refs) == 1) {
|
if (isc_refcount_decrement(&rpzs->refs) == 1) {
|
||||||
isc_refcount_destroy(&rpzs->refs);
|
/*
|
||||||
|
* Destroy the task first, so that nothing runs
|
||||||
|
* in the background that might race with us.
|
||||||
|
*/
|
||||||
|
isc_task_destroy(&rpzs->updater);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Forget the last of view's rpz machinery after
|
* Forget the last of view's rpz machinery after
|
||||||
* the last reference.
|
* the last reference.
|
||||||
@@ -2178,7 +2183,7 @@ dns_rpz_detach_rpzs(dns_rpz_zones_t **rpzsp) {
|
|||||||
}
|
}
|
||||||
DESTROYLOCK(&rpzs->maint_lock);
|
DESTROYLOCK(&rpzs->maint_lock);
|
||||||
isc_rwlock_destroy(&rpzs->search_lock);
|
isc_rwlock_destroy(&rpzs->search_lock);
|
||||||
isc_task_destroy(&rpzs->updater);
|
isc_refcount_destroy(&rpzs->refs);
|
||||||
isc_mem_putanddetach(&rpzs->mctx, rpzs, sizeof(*rpzs));
|
isc_mem_putanddetach(&rpzs->mctx, rpzs, sizeof(*rpzs));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user