diff --git a/exporters/etw/include/opentelemetry/exporters/etw/etw_tracer.h b/exporters/etw/include/opentelemetry/exporters/etw/etw_tracer.h index c6c7f0ed67..2b975e239c 100644 --- a/exporters/etw/include/opentelemetry/exporters/etw/etw_tracer.h +++ b/exporters/etw/include/opentelemetry/exporters/etw/etw_tracer.h @@ -159,11 +159,16 @@ void UpdateStatus(T &t, Properties &props) /** * @brief Tracer class that allows to send spans to ETW Provider. */ - class Tracer : public opentelemetry::trace::Tracer, public std::enable_shared_from_this { +public: + /** + * @brief Indicates whether the tracer is closed. + */ + bool IsClosed() const noexcept { return isClosed_.load(); } +private: /** * @brief Parent provider of this Tracer */ @@ -397,16 +402,6 @@ class Tracer : public opentelemetry::trace::Tracer, friend class Span; - /** - * @brief Init a reference to etw::ProviderHandle - * @return Provider Handle - */ - ETWProvider::Handle &initProvHandle() - { - isClosed_ = false; - return etwProvider().open(provId, encoding); - } - public: /** * @brief Tracer constructor @@ -421,11 +416,11 @@ class Tracer : public opentelemetry::trace::Tracer, tracerProvider_(parent), provId(providerId.data(), providerId.size()), encoding(encoding), - provHandle(initProvHandle()) + provHandle(etwProvider().open(provId, encoding)) { + isClosed_.store(false); traceId_ = GetIdGenerator(tracerProvider_).GenerateTraceId(); } - /** * @brief Start Span * @param name Span name diff --git a/exporters/etw/test/etw_tracer_test.cc b/exporters/etw/test/etw_tracer_test.cc index 5833b6a733..7d32a2ffba 100644 --- a/exporters/etw/test/etw_tracer_test.cc +++ b/exporters/etw/test/etw_tracer_test.cc @@ -566,6 +566,15 @@ TEST(ETWTracer, EndWithCustomTime) } +TEST(ETWTracer, ConstructorInitializesToOpenState) +{ + opentelemetry::exporter::etw::TracerProvider provider; + std::string providerId = "TestProvider"; + opentelemetry::exporter::etw::Tracer tracer(provider, providerId); + // Tracer should be open after construction + EXPECT_FALSE(tracer.IsClosed()); +} + /* clang-format on */ #endif