Skip to content

Commit 82ca99f

Browse files
committed
Fix initialization order of isClosed_ in EtwTracer
1 parent ae1f984 commit 82ca99f

File tree

2 files changed

+30
-3
lines changed

2 files changed

+30
-3
lines changed

exporters/etw/include/opentelemetry/exporters/etw/etw_tracer.h

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,10 @@ void UpdateStatus(T &t, Properties &props)
162162

163163
class Tracer : public opentelemetry::trace::Tracer,
164164
public std::enable_shared_from_this<opentelemetry::trace::Tracer>
165+
165166
{
167+
// To let test verify private state
168+
friend class ETWTracer_ConstructorInitializesToOpenState_Test;
166169

167170
/**
168171
* @brief Parent provider of this Tracer
@@ -182,11 +185,19 @@ class Tracer : public opentelemetry::trace::Tracer,
182185
/**
183186
* @brief Provider Handle
184187
*/
185-
ETWProvider::Handle &provHandle;
188+
//change made in pr
189+
// ETWProvider::Handle &provHandle;
186190

187-
opentelemetry::trace::TraceId traceId_;
191+
// opentelemetry::trace::TraceId traceId_;
192+
193+
// std::atomic<bool> isClosed_{true};
188194

189-
std::atomic<bool> isClosed_{true};
195+
// Fix: Declare isClosed_ before provHandle so it initializes to true
196+
// *before* initProvHandle() runs.
197+
std::atomic<bool> isClosed_{true};
198+
199+
ETWProvider::Handle &provHandle;
200+
opentelemetry::trace::TraceId traceId_;
190201

191202
/**
192203
* @brief ETWProvider is a singleton that aggregates all ETW writes.

exporters/etw/test/etw_tracer_test.cc

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -566,6 +566,22 @@ TEST(ETWTracer, EndWithCustomTime)
566566

567567
}
568568

569+
TEST(ETWTracer, ConstructorInitializesToOpenState)
570+
{
571+
// Setup - Create a mock/real provider dependency
572+
etw::TracerProvider provider;
573+
std::string providerId = "TestProvider";
574+
575+
// Instantiate the Tracer
576+
// This triggers the constructor -> initProvHandle sequence
577+
opentelemetry::exporter::etw::Tracer tracer(provider, providerId);
578+
579+
// Verify the Bug Fix
580+
// Because we added the 'friend' line in the header, we can access isClosed_ directly.
581+
// It should be FALSE (Open) now. Before your fix, this was TRUE.
582+
EXPECT_FALSE(tracer.isClosed_);
583+
}
584+
569585
/* clang-format on */
570586

571587
#endif

0 commit comments

Comments
 (0)