From 3ea7fb18d6486a70d5868702223b52990bd35426 Mon Sep 17 00:00:00 2001 From: gabime Date: Tue, 3 Sep 2019 14:54:17 +0300 Subject: [PATCH] Fix potential race condidion when in logger copy ctor Don't copy other.trace - just create a new one with same size instead --- include/spdlog/details/backtracer.h | 13 +++++++++---- include/spdlog/logger-inl.h | 2 +- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/include/spdlog/details/backtracer.h b/include/spdlog/details/backtracer.h index 5724f8b7..bdf9e9ee 100644 --- a/include/spdlog/details/backtracer.h +++ b/include/spdlog/details/backtracer.h @@ -17,15 +17,20 @@ namespace details { class backtracer { std::mutex mutex_; + size_t n_messages_; circular_q messages_; public: - explicit backtracer(size_t n_messages) : messages_{n_messages} + explicit backtracer(size_t n_messages) : n_messages_{n_messages}, messages_{n_messages} {} - backtracer(const backtracer &other) : messages_{other.messages_} - {} - + + size_t n_messages() const + { + return n_messages_; + } + + void add(const log_msg &msg) { std::lock_guard lock{mutex_}; diff --git a/include/spdlog/logger-inl.h b/include/spdlog/logger-inl.h index eae23b99..78ca392d 100644 --- a/include/spdlog/logger-inl.h +++ b/include/spdlog/logger-inl.h @@ -25,7 +25,7 @@ SPDLOG_INLINE logger::logger(const logger &other) { if (other.tracer_) { - tracer_ = std::make_shared(*other.tracer_); + tracer_ = std::make_shared(other.tracer_->n_messages()); } }