From: Mark Andrews Date: Tue, 8 Sep 2020 03:16:28 +0000 (+1000) Subject: Pause the database iterator to release rwlock X-Git-Tag: v9.17.6~55^2~1 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2e63de94aa902fd923abfde3461e6a03532afbe5;p=thirdparty%2Fbind9.git Pause the database iterator to release rwlock --- diff --git a/lib/dns/zone.c b/lib/dns/zone.c index 11d074c5713..0d4259c7508 100644 --- a/lib/dns/zone.c +++ b/lib/dns/zone.c @@ -8539,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) { @@ -10730,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)); @@ -10746,6 +10748,7 @@ zone_refreshkeys(dns_zone_t *zone) { timer = kd.refresh; } + dns_rriterator_pause(&rrit); set_refreshkeytimer(zone, &kd, now, false); timerset = true; } @@ -10754,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++;