From b638c71d262e296e8a7dd490fa2311006475495a Mon Sep 17 00:00:00 2001 From: Oleksii Mandrychenko Date: Wed, 29 Mar 2017 11:27:59 +0100 Subject: [PATCH 1/4] [#404] Reading past valid address with multisink logger - Initialising atomic value See examples at http://stackoverflow.com/q/36320008/706456 This issue was discovered with dr memory tool on Windows platform, Visual Studio 2015 C++ 11 --- include/spdlog/logger.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/spdlog/logger.h b/include/spdlog/logger.h index 58b4841a..aec1d203 100644 --- a/include/spdlog/logger.h +++ b/include/spdlog/logger.h @@ -87,7 +87,7 @@ protected: spdlog::level_t _level; spdlog::level_t _flush_level; log_err_handler _err_handler; - std::atomic _last_err_time; + std::atomic _last_err_time {0}; // init atomic value to avoid reads of uninitialised memory }; } From 6a41bc40af0d6f060e7b47838bd8126081f1e155 Mon Sep 17 00:00:00 2001 From: Oleksii Mandrychenko Date: Wed, 29 Mar 2017 13:53:11 +0100 Subject: [PATCH 2/4] [#404] Reading past valid address with multisink logger - Initialising atomic value See examples at http://stackoverflow.com/q/36320008/706456 This issue was discovered with dr memory tool on Windows platform, Visual Studio 2015 C++ 11 --- include/spdlog/details/mpmc_bounded_q.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/spdlog/details/mpmc_bounded_q.h b/include/spdlog/details/mpmc_bounded_q.h index 3a46e8eb..c963bc93 100644 --- a/include/spdlog/details/mpmc_bounded_q.h +++ b/include/spdlog/details/mpmc_bounded_q.h @@ -159,9 +159,9 @@ private: cell_t* const buffer_; size_t const buffer_mask_; cacheline_pad_t pad1_; - std::atomic enqueue_pos_; + std::atomic enqueue_pos_ {0}; cacheline_pad_t pad2_; - std::atomic dequeue_pos_; + std::atomic dequeue_pos_ {0}; cacheline_pad_t pad3_; mpmc_bounded_queue(mpmc_bounded_queue const&) = delete; From b5d838cc32a7fe4eec0b4c94ce7c0f48d064a733 Mon Sep 17 00:00:00 2001 From: Oleksii Mandrychenko Date: Wed, 29 Mar 2017 16:04:24 +0100 Subject: [PATCH 3/4] - Reverting changes to mpmc queue --- include/spdlog/details/mpmc_bounded_q.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/spdlog/details/mpmc_bounded_q.h b/include/spdlog/details/mpmc_bounded_q.h index c963bc93..3a46e8eb 100644 --- a/include/spdlog/details/mpmc_bounded_q.h +++ b/include/spdlog/details/mpmc_bounded_q.h @@ -159,9 +159,9 @@ private: cell_t* const buffer_; size_t const buffer_mask_; cacheline_pad_t pad1_; - std::atomic enqueue_pos_ {0}; + std::atomic enqueue_pos_; cacheline_pad_t pad2_; - std::atomic dequeue_pos_ {0}; + std::atomic dequeue_pos_; cacheline_pad_t pad3_; mpmc_bounded_queue(mpmc_bounded_queue const&) = delete; From d315bba1f8234b812a025be356a096d0df55da8f Mon Sep 17 00:00:00 2001 From: Oleksii Mandrychenko Date: Wed, 29 Mar 2017 16:06:59 +0100 Subject: [PATCH 4/4] Initialising members via constructor --- include/spdlog/details/logger_impl.h | 8 ++++---- include/spdlog/logger.h | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/include/spdlog/details/logger_impl.h b/include/spdlog/details/logger_impl.h index 5bb85f67..c712b27a 100644 --- a/include/spdlog/details/logger_impl.h +++ b/include/spdlog/details/logger_impl.h @@ -18,11 +18,11 @@ template inline spdlog::logger::logger(const std::string& logger_name, const It& begin, const It& end): _name(logger_name), _sinks(begin, end), - _formatter(std::make_shared("%+")) + _formatter(std::make_shared("%+")), + _level(level::info), + _flush_level(level::off), + _last_err_time(0) { - _level = level::info; - _flush_level = level::off; - _last_err_time = 0; _err_handler = [this](const std::string &msg) { this->_default_err_handler(msg); diff --git a/include/spdlog/logger.h b/include/spdlog/logger.h index aec1d203..58b4841a 100644 --- a/include/spdlog/logger.h +++ b/include/spdlog/logger.h @@ -87,7 +87,7 @@ protected: spdlog::level_t _level; spdlog::level_t _flush_level; log_err_handler _err_handler; - std::atomic _last_err_time {0}; // init atomic value to avoid reads of uninitialised memory + std::atomic _last_err_time; }; }