]> 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:26:28 +0000 (18:26 +1000)
(cherry picked from commit 2e63de94aa902fd923abfde3461e6a03532afbe5)

lib/dns/zone.c

index 25ed06299458717d33d9161372e358b1ab0717c5..a81733f828c5edf26a1a6480bea2a25f7ae16848 100644 (file)
@@ -7975,6 +7975,7 @@ zone_nsec3chain(dns_zone_t *zone) {
                                     "buildnsecchain = %u\n", buildnsecchain);
 
                dns_dbiterator_current(nsec3chain->dbiterator, &node, name);
+               dns_dbiterator_pause(nsec3chain->dbiterator);
                delegation = false;
 
                if (!buildnsecchain) {
@@ -10005,6 +10006,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));
@@ -10019,6 +10021,7 @@ zone_refreshkeys(dns_zone_t *zone) {
                        if (timer > kd.refresh)
                                timer = kd.refresh;
 
+                       dns_rriterator_pause(&rrit);
                        set_refreshkeytimer(zone, &kd, now, false);
                        timerset = true;
                }
@@ -10026,6 +10029,8 @@ zone_refreshkeys(dns_zone_t *zone) {
                if (timer > now)
                        continue;
 
+               dns_rriterator_pause(&rrit);
+
                kfetch = isc_mem_get(zone->mctx, sizeof(dns_keyfetch_t));
                if (kfetch == NULL) {
                        fetch_err = true;