]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Exclude the TCP latency calculations from TSAN analysis
authorRemi Gacogne <remi.gacogne@powerdns.com>
Thu, 29 Apr 2021 11:26:24 +0000 (13:26 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Thu, 26 Aug 2021 14:30:26 +0000 (16:30 +0200)
They are indeed racy in some cases, but we do not care about perfect
accuracy there.

pdns/dnsdist-tcp.cc
pdns/dnsdistdist/dnsdist-tsan.supp

index 6653cee5dd75aaa788ce346bc414b160228866de..aa4a47d31d5fec75e4153e73b0c3203d1414a42a 100644 (file)
@@ -347,6 +347,11 @@ static IOState sendQueuedResponses(std::shared_ptr<IncomingTCPConnectionState>&
   return IOState::Done;
 }
 
+static void updateTCPLatency(const std::shared_ptr<DownstreamState>& ds, double udiff)
+{
+  ds->latencyUsecTCP = (127.0 * ds->latencyUsecTCP / 128.0) + udiff/128.0;
+}
+
 static void handleResponseSent(std::shared_ptr<IncomingTCPConnectionState>& state, const TCPResponse& currentResponse)
 {
   if (currentResponse.d_idstate.qtype == QType::AXFR || currentResponse.d_idstate.qtype == QType::IXFR) {
@@ -363,7 +368,7 @@ static void handleResponseSent(std::shared_ptr<IncomingTCPConnectionState>& stat
 
     ::handleResponseSent(ids, udiff, state->d_ci.remote, ds->remote, static_cast<unsigned int>(currentResponse.d_buffer.size()), currentResponse.d_cleartextDH);
 
-    ds->latencyUsecTCP = (127.0 * ds->latencyUsecTCP / 128.0) + udiff/128.0;
+    updateTCPLatency(ds, udiff);
   }
 }
 
index 0899dde574172a5b8e1f0d263b36394e856775a7..39ffe6cd485e7b3616a7ea7b3dc2ecf2e7148d73 100644 (file)
@@ -1,6 +1,7 @@
 # Part of that code has a race indeed, where we read the value then update it
 # We don't really care for these metrics
 race:doLatencyStats
+race:updateTCPLatency
 race:handleStats
 race:ClientState::updateTCPMetrics
 race:DownstreamState::updateTCPMetrics