12 #include "opentelemetry/common/spin_lock_mutex.h"
13 #include "opentelemetry/nostd/span.h"
14 #include "opentelemetry/sdk/common/exporter_utils.h"
15 #include "opentelemetry/sdk/trace/exporter.h"
16 #include "opentelemetry/sdk/trace/processor.h"
17 #include "opentelemetry/sdk/trace/recordable.h"
18 #include "opentelemetry/trace/span_context.h"
19 #include "opentelemetry/version.h"
48 return exporter_->MakeRecordable();
52 const opentelemetry::trace::SpanContext & ) noexcept
override
55 void OnEnd(std::unique_ptr<Recordable> &&span) noexcept
override
58 const std::lock_guard<opentelemetry::common::SpinLockMutex> locked(lock_);
69 if (exporter_ !=
nullptr)
71 return exporter_->ForceFlush(timeout);
90 if (exporter_ !=
nullptr && !shutdown_latch_.test_and_set(std::memory_order_acquire))
92 return exporter_->Shutdown(timeout);
98 std::unique_ptr<SpanExporter> exporter_;
99 opentelemetry::common::SpinLockMutex lock_;
100 #if defined(__cpp_lib_atomic_value_initialization) && \
101 __cpp_lib_atomic_value_initialization >= 201911L
102 std::atomic_flag shutdown_latch_{};
104 std::atomic_flag shutdown_latch_ = ATOMIC_FLAG_INIT;