From: Peter van Dijk Date: Thu, 12 Apr 2018 18:33:41 +0000 (+0200) Subject: requeue serial check if NOTIFY comes in while incoming AXFR is ongoing X-Git-Tag: dnsdist-1.3.1~155^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=refs%2Fpull%2F6484%2Fhead;p=thirdparty%2Fpdns.git requeue serial check if NOTIFY comes in while incoming AXFR is ongoing --- diff --git a/pdns/communicator.cc b/pdns/communicator.cc index 27d6f3507e..e521b5d6e2 100644 --- a/pdns/communicator.cc +++ b/pdns/communicator.cc @@ -125,8 +125,17 @@ void CommunicatorClass::mainloop(void) while(time(0) < next) { rc=d_any_sem.tryWait(); - if(rc) + if(rc) { + bool extraSlaveRefresh = false; Utility::sleep(1); + { + Lock l(&d_lock); + if (d_tocheck.size()) + extraSlaveRefresh = true; + } + if (extraSlaveRefresh) + slaveRefresh(&P); + } else { break; // something happened } diff --git a/pdns/slavecommunicator.cc b/pdns/slavecommunicator.cc index 37b42de0e2..9dd57548b8 100644 --- a/pdns/slavecommunicator.cc +++ b/pdns/slavecommunicator.cc @@ -736,8 +736,18 @@ void CommunicatorClass::slaveRefresh(PacketHandler *P) set trysuperdomains; { Lock l(&d_lock); - rdomains.insert(rdomains.end(), d_tocheck.begin(), d_tocheck.end()); - d_tocheck.clear(); + set requeue; + for(const auto& di: d_tocheck) { + if(d_inprogress.count(di.zone)) { + g_log<