From a8998a8a7ad7cebf8128deb1a402f67b9b13d427 Mon Sep 17 00:00:00 2001 From: Dimitris Christodoulou Date: Thu, 20 Nov 2025 10:36:09 +0000 Subject: [PATCH] Resolve test_tracer data race --- test/test_integration_tracer.cxx | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/test/test_integration_tracer.cxx b/test/test_integration_tracer.cxx index 0f6981f2..8eaaea5d 100644 --- a/test/test_integration_tracer.cxx +++ b/test/test_integration_tracer.cxx @@ -45,23 +45,26 @@ class test_span : public couchbase::tracing::request_span void add_tag(const std::string& name, std::uint64_t value) override { + const std::scoped_lock lock(mutex_); int_tags_[name] = value; } void add_tag(const std::string& name, const std::string& value) override { + const std::scoped_lock lock(mutex_); string_tags_[name] = value; } void end() override { + const std::scoped_lock lock(mutex_); duration_ = std::chrono::duration_cast( std::chrono::steady_clock::now() - start_); } void add_child_span(const std::shared_ptr& child) { - const std::scoped_lock lock(child_spans_lock_); + const std::scoped_lock lock(mutex_); const auto child_span_name = child->name(); if (child_spans_.count(child_span_name) == 0) { @@ -70,38 +73,42 @@ class test_span : public couchbase::tracing::request_span child_spans_[child_span_name].emplace_back(child); } - auto child_spans() -> std::map>> + [[nodiscard]] auto child_spans() -> std::map>> { - const std::shared_lock lock(child_spans_lock_); + const std::scoped_lock lock(mutex_); return child_spans_; } - auto child_spans(const std::string& name) -> std::vector> + [[nodiscard]] auto child_spans(const std::string& name) -> std::vector> { - const std::shared_lock lock(child_spans_lock_); + const std::scoped_lock lock(mutex_); if (child_spans_.count(name) == 0) { return {}; } return child_spans_.at(name); } - auto string_tags() -> std::map + [[nodiscard]] auto string_tags() -> std::map { + const std::scoped_lock lock(mutex_); return string_tags_; } - auto int_tags() -> std::map + [[nodiscard]] auto int_tags() -> std::map { + const std::scoped_lock lock(mutex_); return int_tags_; } - auto duration() const -> std::chrono::nanoseconds + [[nodiscard]] auto duration() -> std::chrono::nanoseconds { + const std::scoped_lock lock(mutex_); return duration_; } - auto start() const -> std::chrono::time_point + [[nodiscard]] auto start() -> std::chrono::time_point { + const std::scoped_lock lock(mutex_); return start_; } @@ -117,7 +124,7 @@ class test_span : public couchbase::tracing::request_span std::map string_tags_; std::map int_tags_; std::map>> child_spans_{}; - std::shared_mutex child_spans_lock_{}; + std::mutex mutex_{}; }; class test_tracer : public couchbase::tracing::request_tracer