From 0799001c9ea11a090815316e47f1d5781ed61c30 Mon Sep 17 00:00:00 2001 From: Ehsan Saei <71217171+esigo@users.noreply.github.com> Date: Sun, 9 Oct 2022 19:01:03 +0200 Subject: [PATCH] fix data race on MeterContext::meters_ (#1668) --- sdk/include/opentelemetry/sdk/metrics/meter_context.h | 1 + sdk/src/metrics/meter_context.cc | 2 ++ 2 files changed, 3 insertions(+) diff --git a/sdk/include/opentelemetry/sdk/metrics/meter_context.h b/sdk/include/opentelemetry/sdk/metrics/meter_context.h index e35700175d..c7197fd18b 100644 --- a/sdk/include/opentelemetry/sdk/metrics/meter_context.h +++ b/sdk/include/opentelemetry/sdk/metrics/meter_context.h @@ -125,6 +125,7 @@ class MeterContext : public std::enable_shared_from_this std::atomic_flag shutdown_latch_ = ATOMIC_FLAG_INIT; opentelemetry::common::SpinLockMutex forceflush_lock_; + opentelemetry::common::SpinLockMutex storage_lock_; }; } // namespace metrics diff --git a/sdk/src/metrics/meter_context.cc b/sdk/src/metrics/meter_context.cc index 346b1dce29..8c7abd97e9 100644 --- a/sdk/src/metrics/meter_context.cc +++ b/sdk/src/metrics/meter_context.cc @@ -31,6 +31,7 @@ ViewRegistry *MeterContext::GetViewRegistry() const noexcept nostd::span> MeterContext::GetMeters() noexcept { + std::lock_guard guard(storage_lock_); return nostd::span>{meters_}; } @@ -59,6 +60,7 @@ void MeterContext::AddView(std::unique_ptr instrument_select void MeterContext::AddMeter(std::shared_ptr meter) { + std::lock_guard guard(storage_lock_); meters_.push_back(meter); }