From: Remi Gacogne Date: Tue, 29 Jul 2025 08:34:48 +0000 (+0200) Subject: dnsdist: Better config refresh logic in the TCP/DoH threads X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=51d2c34c0e209120a4692697a56e3a8bcaeb9af0;p=thirdparty%2Fpdns.git dnsdist: Better config refresh logic in the TCP/DoH threads Signed-off-by: Remi Gacogne --- diff --git a/pdns/dnsdistdist/dnsdist-nghttp2.cc b/pdns/dnsdistdist/dnsdist-nghttp2.cc index 48b76a783..8208737b1 100644 --- a/pdns/dnsdistdist/dnsdist-nghttp2.cc +++ b/pdns/dnsdistdist/dnsdist-nghttp2.cc @@ -874,11 +874,15 @@ static void dohClientThread(pdns::channel::Receiver&& 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; diff --git a/pdns/dnsdistdist/dnsdist-tcp.cc b/pdns/dnsdistdist/dnsdist-tcp.cc index 8a4259158..6de99d4b6 100644 --- a/pdns/dnsdistdist/dnsdist-tcp.cc +++ b/pdns/dnsdistdist/dnsdist-tcp.cc @@ -1713,11 +1713,15 @@ static void tcpClientThread(pdns::channel::Receiver&& 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& states) if (params.size() == 1) { while (true) { + dnsdist::configuration::refreshLocalRuntimeConfiguration(); acceptNewConnection(params.at(0), nullptr); } } @@ -1880,9 +1885,14 @@ void tcpAcceptorThread(const std::vector& 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(); + } } } }