From 4918464fbe3fe031dec90a8ec411833776e6294d Mon Sep 17 00:00:00 2001 From: Miod Vallat Date: Fri, 13 Jun 2025 08:58:36 +0200 Subject: [PATCH] Use atomic types for the latency metrics. --- pdns/auth-main.cc | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/pdns/auth-main.cc b/pdns/auth-main.cc index cfe621282e..88c3071b64 100644 --- a/pdns/auth-main.cc +++ b/pdns/auth-main.cc @@ -127,7 +127,7 @@ AuthZoneCache g_zoneCache; std::unique_ptr DP{nullptr}; static std::unique_ptr s_dynListener{nullptr}; CommunicatorClass Communicator; -static double avg_latency{0.0}, receive_latency{0.0}, cache_latency{0.0}, backend_latency{0.0}, send_latency{0.0}; +static std::atomic avg_latency{0.0}, receive_latency{0.0}, cache_latency{0.0}, backend_latency{0.0}, send_latency{0.0}; static unique_ptr s_tcpNameserver{nullptr}; static vector s_distributors; static shared_ptr s_udpNameserver{nullptr}; @@ -523,6 +523,12 @@ static int isGuarded(char** argv) return !!p; } +static void update_latencies(int start, int diff) +{ + send_latency = 0.999 * send_latency + 0.001 * std::max(diff - start, 0); + avg_latency = 0.999 * avg_latency + 0.001 * std::max(diff, 0); // 'EWMA' +} + static void sendout(std::unique_ptr& a, int start) { if (!a) @@ -536,9 +542,7 @@ static void sendout(std::unique_ptr& a, int start) s_udpNameserver->send(*a); diff = a->d_dt.udiff(); - send_latency = 0.999 * send_latency + 0.001 * std::max(diff - start, 0); - - avg_latency = 0.999 * avg_latency + 0.001 * std::max(diff, 0); + update_latencies(start, diff); } catch (const std::exception& e) { g_log << Logger::Error << "Caught unhandled exception while sending a response: " << e.what() << endl; @@ -653,8 +657,7 @@ try { NS->send(cached); // answer it then inlined diff = question.d_dt.udiff(); - send_latency = 0.999 * send_latency + 0.001 * std::max(diff - start, 0); - avg_latency = 0.999 * avg_latency + 0.001 * std::max(diff, 0); // 'EWMA' + update_latencies(start, diff); continue; } diff = question.d_dt.udiffNoReset(); -- 2.47.2