]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Pause the database iterator to release rwlock
authorMark Andrews <marka@isc.org>
Tue, 8 Sep 2020 03:16:28 +0000 (13:16 +1000)
committerMark Andrews <marka@isc.org>
Thu, 17 Sep 2020 08:24:07 +0000 (18:24 +1000)
(cherry picked from commit 2e63de94aa902fd923abfde3461e6a03532afbe5)

lib/dns/zone.c

index a5d3011dd6cf3a7bc631af6685b3cd38d42460b0..ddb3ebdf83a3f76fdb0053ed5b9f21485010d0e8 100644 (file)
@@ -8501,6 +8501,7 @@ zone_nsec3chain(dns_zone_t *zone) {
                }
 
                dns_dbiterator_current(nsec3chain->dbiterator, &node, name);
+               dns_dbiterator_pause(nsec3chain->dbiterator);
                delegation = false;
 
                if (!buildnsecchain) {
@@ -10690,6 +10691,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));
@@ -10706,6 +10708,7 @@ zone_refreshkeys(dns_zone_t *zone) {
                                timer = kd.refresh;
                        }
 
+                       dns_rriterator_pause(&rrit);
                        set_refreshkeytimer(zone, &kd, now, false);
                        timerset = true;
                }
@@ -10714,6 +10717,8 @@ zone_refreshkeys(dns_zone_t *zone) {
                        continue;
                }
 
+               dns_rriterator_pause(&rrit);
+
                kfetch = isc_mem_get(zone->mctx, sizeof(dns_keyfetch_t));
 
                zone->refreshkeycount++;