mirror of
https://github.com/isc-projects/bind9.git
synced 2026-06-03 13:59:27 -04:00
Merge branch '2123-lock-order-inversions-in-main' into 'main'
Resolve "Lock order inversions in main" Closes #2123 See merge request isc-projects/bind9!4090
This commit is contained in:
commit
56ff7bece9
1 changed files with 19 additions and 2 deletions
|
|
@ -4556,7 +4556,11 @@ sync_keyzone(dns_zone_t *zone, dns_db_t *db) {
|
|||
if (rdataset->type != dns_rdatatype_keydata) {
|
||||
continue;
|
||||
}
|
||||
|
||||
/*
|
||||
* Release db wrlock to prevent LOR reports against
|
||||
* dns_keytable_forall() call below.
|
||||
*/
|
||||
dns_rriterator_pause(&rrit);
|
||||
result = dns_keytable_find(sr, rrname, &keynode);
|
||||
if (result != ISC_R_SUCCESS || !dns_keynode_managed(keynode)) {
|
||||
CHECK(delete_keydata(db, ver, &diff, rrname, rdataset));
|
||||
|
|
@ -8267,6 +8271,8 @@ zone_nsec3chain(dns_zone_t *zone) {
|
|||
* generated by dns__zone_updatesigs() calls later in this function.
|
||||
*/
|
||||
while (nsec3chain != NULL && nodes-- > 0 && signatures > 0) {
|
||||
dns_dbiterator_pause(nsec3chain->dbiterator);
|
||||
|
||||
LOCK_ZONE(zone);
|
||||
nextnsec3chain = ISC_LIST_NEXT(nsec3chain, link);
|
||||
|
||||
|
|
@ -8493,6 +8499,8 @@ zone_nsec3chain(dns_zone_t *zone) {
|
|||
first = true;
|
||||
buildnsecchain = false;
|
||||
while (nsec3chain != NULL && nodes-- > 0 && signatures > 0) {
|
||||
dns_dbiterator_pause(nsec3chain->dbiterator);
|
||||
|
||||
LOCK_ZONE(zone);
|
||||
nextnsec3chain = ISC_LIST_NEXT(nsec3chain, link);
|
||||
UNLOCK_ZONE(zone);
|
||||
|
|
@ -8531,6 +8539,7 @@ zone_nsec3chain(dns_zone_t *zone) {
|
|||
}
|
||||
|
||||
dns_dbiterator_current(nsec3chain->dbiterator, &node, name);
|
||||
dns_dbiterator_pause(nsec3chain->dbiterator);
|
||||
delegation = false;
|
||||
|
||||
if (!buildnsecchain) {
|
||||
|
|
@ -8654,12 +8663,12 @@ zone_nsec3chain(dns_zone_t *zone) {
|
|||
goto same_removechain;
|
||||
}
|
||||
if (result == ISC_R_NOMORE) {
|
||||
dns_dbiterator_pause(nsec3chain->dbiterator);
|
||||
LOCK_ZONE(zone);
|
||||
ISC_LIST_UNLINK(zone->nsec3chain, nsec3chain,
|
||||
link);
|
||||
UNLOCK_ZONE(zone);
|
||||
ISC_LIST_APPEND(cleanup, nsec3chain, link);
|
||||
dns_dbiterator_pause(nsec3chain->dbiterator);
|
||||
result = fixup_nsec3param(
|
||||
db, version, nsec3chain, false,
|
||||
privatetype, ¶m_diff);
|
||||
|
|
@ -9235,6 +9244,8 @@ zone_sign(dns_zone_t *zone) {
|
|||
|
||||
while (signing != NULL && nodes-- > 0 && signatures > 0) {
|
||||
bool has_alg = false;
|
||||
|
||||
dns_dbiterator_pause(signing->dbiterator);
|
||||
nextsigning = ISC_LIST_NEXT(signing, link);
|
||||
|
||||
ZONEDB_LOCK(&zone->dblock, isc_rwlocktype_read);
|
||||
|
|
@ -10720,6 +10731,7 @@ zone_refreshkeys(dns_zone_t *zone) {
|
|||
|
||||
/* Removal timer expired? */
|
||||
if (kd.removehd != 0 && kd.removehd < now) {
|
||||
dns_rriterator_pause(&rrit);
|
||||
CHECK(update_one_rr(db, ver, &diff,
|
||||
DNS_DIFFOP_DEL, name, ttl,
|
||||
&rdata));
|
||||
|
|
@ -10736,6 +10748,7 @@ zone_refreshkeys(dns_zone_t *zone) {
|
|||
timer = kd.refresh;
|
||||
}
|
||||
|
||||
dns_rriterator_pause(&rrit);
|
||||
set_refreshkeytimer(zone, &kd, now, false);
|
||||
timerset = true;
|
||||
}
|
||||
|
|
@ -10744,6 +10757,8 @@ zone_refreshkeys(dns_zone_t *zone) {
|
|||
continue;
|
||||
}
|
||||
|
||||
dns_rriterator_pause(&rrit);
|
||||
|
||||
kfetch = isc_mem_get(zone->mctx, sizeof(dns_keyfetch_t));
|
||||
|
||||
zone->refreshkeycount++;
|
||||
|
|
@ -16024,6 +16039,8 @@ copy_non_dnssec_records(dns_zone_t *zone, dns_db_t *db, dns_db_t *version,
|
|||
return (ISC_R_SUCCESS);
|
||||
}
|
||||
|
||||
dns_dbiterator_pause(dbiterator);
|
||||
|
||||
result = dns_db_findnode(db, name, true, &node);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
goto cleanup;
|
||||
|
|
|
|||
Loading…
Reference in a new issue