From: Pieter Lexis Date: Mon, 3 Nov 2025 15:33:16 +0000 (+0100) Subject: feat(dnsdist): wrap d_traceid in Tracer in a lock X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=de933b7dfe39834a3936a9baf762f092ff6fdd97;p=thirdparty%2Fpdns.git feat(dnsdist): wrap d_traceid in Tracer in a lock --- diff --git a/pdns/dnsdistdist/dnsdist-opentelemetry.cc b/pdns/dnsdistdist/dnsdist-opentelemetry.cc index 0797d7fed5..81afbfa722 100644 --- a/pdns/dnsdistdist/dnsdist-opentelemetry.cc +++ b/pdns/dnsdistdist/dnsdist-opentelemetry.cc @@ -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 } diff --git a/pdns/dnsdistdist/dnsdist-opentelemetry.hh b/pdns/dnsdistdist/dnsdist-opentelemetry.hh index a13bfd0715..cd7436d703 100644 --- a/pdns/dnsdistdist/dnsdist-opentelemetry.hh +++ b/pdns/dnsdistdist/dnsdist-opentelemetry.hh @@ -295,7 +295,7 @@ private: * * it is mutable because it is set the first time it is accessed */ - mutable TraceID d_traceid{}; + mutable LockGuarded d_traceid{}; /** * @brief The last SpanID that was added to this Tracer */