File tree Expand file tree Collapse file tree 2 files changed +24
-3
lines changed
include/opentelemetry/exporters/etw Expand file tree Collapse file tree 2 files changed +24
-3
lines changed Original file line number Diff line number Diff 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-
163162class 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
Original file line number Diff line number Diff 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
You can’t perform that action at this time.
0 commit comments