From 82358e8ebe26d04848e565ecbd53506c01bb8ce9 Mon Sep 17 00:00:00 2001 From: gabime Date: Fri, 17 Jan 2025 17:16:45 +0200 Subject: [PATCH] refactor async sink --- include/spdlog/sinks/async_sink.h | 2 +- src/sinks/async_sink.cpp | 14 ++++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/include/spdlog/sinks/async_sink.h b/include/spdlog/sinks/async_sink.h index 37831d95..91c07851 100644 --- a/include/spdlog/sinks/async_sink.h +++ b/include/spdlog/sinks/async_sink.h @@ -94,7 +94,7 @@ private: using async_log_msg = details::async_log_msg; using queue_t = details::mpmc_blocking_queue; - void send_message_(async_log_msg::type msg_type, const details::log_msg &msg) const; + void enqueue_message_(details::async_log_msg &&msg) const; void backend_loop_(); void backend_log_(const details::log_msg &msg) ; void backend_flush_(); diff --git a/src/sinks/async_sink.cpp b/src/sinks/async_sink.cpp index e75d6fd1..ae2cba16 100644 --- a/src/sinks/async_sink.cpp +++ b/src/sinks/async_sink.cpp @@ -45,10 +45,12 @@ async_sink::~async_sink() { } } -void async_sink::log(const details::log_msg &msg) { send_message_(async_log_msg::type::log, msg); } +void async_sink::log(const details::log_msg &msg) { + enqueue_message_(async_log_msg(async_log_msg::type::log, msg)); +} void async_sink::flush() { - send_message_(async_log_msg::type::flush, details::log_msg()); + enqueue_message_(details::async_log_msg(async_log_msg::type::flush)); } void async_sink::set_pattern(const std::string &pattern) { set_formatter(std::make_unique(pattern)); } @@ -94,16 +96,16 @@ void async_sink::reset_discard_counter() const { q_->reset_discard_counter(); } const async_sink::config &async_sink::get_config() const { return config_; } // private methods -void async_sink::send_message_(async_log_msg::type msg_type, const details::log_msg &msg) const { +void async_sink::enqueue_message_(details::async_log_msg &&msg) const { switch (config_.policy) { case overflow_policy::block: - q_->enqueue(async_log_msg(msg_type, msg)); + q_->enqueue(std::move(msg)); break; case overflow_policy::overrun_oldest: - q_->enqueue_nowait(async_log_msg(msg_type, msg)); + q_->enqueue_nowait(std::move(msg)); break; case overflow_policy::discard_new: - q_->enqueue_if_have_room(async_log_msg(msg_type, msg)); + q_->enqueue_if_have_room(std::move(msg)); break; default: assert(false);