Skip to content

Commit 109d27e

Browse files
committed
Fix initialization order of isClosed_ in EtwTracer
1 parent ae1f984 commit 109d27e

File tree

2 files changed

+24
-3
lines changed

2 files changed

+24
-3
lines changed

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

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -159,11 +159,19 @@ void UpdateStatus(T &t, Properties &props)
159159
/**
160160
* @brief Tracer class that allows to send spans to ETW Provider.
161161
*/
162-
163162
class Tracer : public opentelemetry::trace::Tracer,
164163
public std::enable_shared_from_this<opentelemetry::trace::Tracer>
165164
{
165+
public:
166+
/**
167+
* @brief Indicates whether the tracer is closed.
168+
*/
169+
bool IsClosed() const noexcept
170+
{
171+
return isClosed_.load();
172+
}
166173

174+
private:
167175
/**
168176
* @brief Parent provider of this Tracer
169177
*/
@@ -179,15 +187,17 @@ class Tracer : public opentelemetry::trace::Tracer,
179187
*/
180188
ETWProvider::EventFormat encoding;
181189

190+
// Order matters: isClosed_ must initialize to true BEFORE provHandle
191+
// runs its initialization logic.
192+
std::atomic<bool> isClosed_{true};
193+
182194
/**
183195
* @brief Provider Handle
184196
*/
185197
ETWProvider::Handle &provHandle;
186198

187199
opentelemetry::trace::TraceId traceId_;
188200

189-
std::atomic<bool> isClosed_{true};
190-
191201
/**
192202
* @brief ETWProvider is a singleton that aggregates all ETW writes.
193203
* @return

exporters/etw/test/etw_tracer_test.cc

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

567567
}
568568

569+
TEST(ETWTracer, ConstructorInitializesToOpenState)
570+
{
571+
etw::TracerProvider provider;
572+
std::string providerId = "TestProvider";
573+
574+
opentelemetry::exporter::etw::Tracer tracer(provider, providerId);
575+
576+
// Tracer should be open after construction
577+
EXPECT_FALSE(tracer.IsClosed());
578+
}
579+
569580
/* clang-format on */
570581

571582
#endif

0 commit comments

Comments
 (0)