]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Better config refresh logic in the TCP/DoH threads
authorRemi Gacogne <remi.gacogne@powerdns.com>
Tue, 29 Jul 2025 08:34:48 +0000 (10:34 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Tue, 29 Jul 2025 08:34:48 +0000 (10:34 +0200)
Signed-off-by: Remi Gacogne <remi.gacogne@powerdns.com>
pdns/dnsdistdist/dnsdist-nghttp2.cc
pdns/dnsdistdist/dnsdist-tcp.cc

index 48b76a783baba1fbf430a2f38afa28b8b7247c37..8208737b1f4e9a12bbc5ee46b026766cb955401c 100644 (file)
@@ -874,11 +874,15 @@ static void dohClientThread(pdns::channel::Receiver<CrossProtocolQuery>&& receiv
 
     gettimeofday(&now, nullptr);
     time_t lastTimeoutScan = now.tv_sec;
+    time_t lastConfigRefresh = now.tv_sec;
 
     for (;;) {
       data.mplexer->run(&now, 1000);
 
-      dnsdist::configuration::refreshLocalRuntimeConfiguration();
+      if (now.tv_sec > lastConfigRefresh) {
+        lastConfigRefresh = now.tv_sec;
+        dnsdist::configuration::refreshLocalRuntimeConfiguration();
+      }
 
       if (now.tv_sec > lastTimeoutScan) {
         lastTimeoutScan = now.tv_sec;
index 8a4259158cd6ecfef040e002282a3a78c839715c..6de99d4b6d7b5f12d61473ee7229e5865d976314 100644 (file)
@@ -1713,11 +1713,15 @@ static void tcpClientThread(pdns::channel::Receiver<ConnectionInfo>&& queryRecei
     timeval now{};
     gettimeofday(&now, nullptr);
     time_t lastTimeoutScan = now.tv_sec;
+    time_t lastConfigRefresh = now.tv_sec;
 
     for (;;) {
       data.mplexer->run(&now);
 
-      dnsdist::configuration::refreshLocalRuntimeConfiguration();
+      if (now.tv_sec > lastConfigRefresh) {
+        lastConfigRefresh = now.tv_sec;
+        dnsdist::configuration::refreshLocalRuntimeConfiguration();
+      }
 
       try {
         t_downstreamTCPConnectionsManager.cleanupClosedConnections(now);
@@ -1864,6 +1868,7 @@ void tcpAcceptorThread(const std::vector<ClientState*>& states)
 
   if (params.size() == 1) {
     while (true) {
+      dnsdist::configuration::refreshLocalRuntimeConfiguration();
       acceptNewConnection(params.at(0), nullptr);
     }
   }
@@ -1880,9 +1885,14 @@ void tcpAcceptorThread(const std::vector<ClientState*>& states)
     }
 
     timeval now{};
+    time_t lastConfigRefresh = now.tv_sec;
     while (true) {
       mplexer->run(&now, -1);
-      dnsdist::configuration::refreshLocalRuntimeConfiguration();
+
+      if (now.tv_sec > lastConfigRefresh) {
+        lastConfigRefresh = now.tv_sec;
+        dnsdist::configuration::refreshLocalRuntimeConfiguration();
+      }
     }
   }
 }