]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
feat(dnsdist): wrap d_traceid in Tracer in a lock 16402/head
authorPieter Lexis <pieter.lexis@powerdns.com>
Mon, 3 Nov 2025 15:33:16 +0000 (16:33 +0100)
committerPieter Lexis <pieter.lexis@powerdns.com>
Tue, 4 Nov 2025 08:46:07 +0000 (09:46 +0100)
pdns/dnsdistdist/dnsdist-opentelemetry.cc
pdns/dnsdistdist/dnsdist-opentelemetry.hh

index 0797d7fed59628a6b888729b8791fea4e44b188f..81afbfa7227c53afbb0bd768ff880fc75da64530 100644 (file)
@@ -56,11 +56,11 @@ TracesData Tracer::getTracesData()
 
   otTrace.resource_spans.at(0).scope_spans.at(0).scope.attributes.push_back(hostnameAttr);
 
-  auto lockedSpans = d_spans.read_only_lock();
-  for (auto const& lockedSpan : *lockedSpans) {
+  auto traceid = getTraceID();
+  for (auto const& lockedSpan : *d_spans.read_only_lock()) {
     otTrace.resource_spans.at(0).scope_spans.at(0).spans.push_back(
       {
-        .trace_id = getTraceID(),
+        .trace_id = traceid,
         .span_id = lockedSpan.span_id,
         .parent_span_id = lockedSpan.parent_span_id,
         .name = lockedSpan.name,
@@ -211,10 +211,11 @@ TraceID Tracer::getTraceID() const
 #ifdef DISABLE_PROTOBUF
   return 0;
 #else
-  if (d_traceid == pdns::trace::s_emptyTraceID) {
-    d_traceid.makeRandom();
+  auto lockedTraceID = d_traceid.lock();
+  if (*lockedTraceID == pdns::trace::s_emptyTraceID) {
+    lockedTraceID->makeRandom();
   }
-  return d_traceid;
+  return *lockedTraceID;
 #endif
 }
 
index a13bfd0715a64db7b33ddd81a877bb6a38705273..cd7436d703b933050569c2cc78f49b7f9fbad473 100644 (file)
@@ -295,7 +295,7 @@ private:
    *
    * it is mutable because it is set the first time it is accessed
    */
-  mutable TraceID d_traceid{};
+  mutable LockGuarded<TraceID> d_traceid{};
   /**
    * @brief The last SpanID that was added to this Tracer
    */