Skip to content

Commit 7fb5a00

Browse files
authored
[ETW] Fix tracer initialization order (#3824)
1 parent 356fc9e commit 7fb5a00

File tree

2 files changed

+17
-13
lines changed

2 files changed

+17
-13
lines changed

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

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -159,11 +159,16 @@ 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 { return isClosed_.load(); }
166170

171+
private:
167172
/**
168173
* @brief Parent provider of this Tracer
169174
*/
@@ -397,16 +402,6 @@ class Tracer : public opentelemetry::trace::Tracer,
397402

398403
friend class Span;
399404

400-
/**
401-
* @brief Init a reference to etw::ProviderHandle
402-
* @return Provider Handle
403-
*/
404-
ETWProvider::Handle &initProvHandle()
405-
{
406-
isClosed_ = false;
407-
return etwProvider().open(provId, encoding);
408-
}
409-
410405
public:
411406
/**
412407
* @brief Tracer constructor
@@ -421,11 +416,11 @@ class Tracer : public opentelemetry::trace::Tracer,
421416
tracerProvider_(parent),
422417
provId(providerId.data(), providerId.size()),
423418
encoding(encoding),
424-
provHandle(initProvHandle())
419+
provHandle(etwProvider().open(provId, encoding))
425420
{
421+
isClosed_.store(false);
426422
traceId_ = GetIdGenerator(tracerProvider_).GenerateTraceId();
427423
}
428-
429424
/**
430425
* @brief Start Span
431426
* @param name Span name

exporters/etw/test/etw_tracer_test.cc

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

567567
}
568568

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

571580
#endif

0 commit comments

Comments
 (0)