From f178159fba0d0779bd6102248c6f8c7064bd575d Mon Sep 17 00:00:00 2001 From: Danny Robson Date: Mon, 3 Aug 2020 11:47:45 +1000 Subject: [PATCH] log: prefer once_flag over an atomic --- log/log.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/log/log.cpp b/log/log.cpp index 70e90bc3..b4e2096d 100644 --- a/log/log.cpp +++ b/log/log.cpp @@ -47,7 +47,7 @@ cruft::log::needs_break (level_t level) /////////////////////////////////////////////////////////////////////////////// // mingw#xxx: MinGW doesn't have once_flag so we just use an atomic bool. // Pray that multiple threads don't run into an issue here. -static std::atomic s_sink_init; +static std::once_flag s_sink_init; static std::unique_ptr s_default_sink; @@ -64,7 +64,7 @@ cruft::log::default_sink (std::unique_ptr value) cruft::log::sink::base& cruft::log::default_sink () { - if (unlikely (!s_sink_init)) { + std::call_once (s_sink_init, [&] () { static char const *DEFAULT_SINK = "CONSOLE"; char const *log_sink = getenv ("CRUFT_LOG_SINK") ?: DEFAULT_SINK; @@ -76,9 +76,7 @@ cruft::log::default_sink () std::clog << "Unknown logging sink. Falling back to console.\n"; default_sink (std::make_unique (PACKAGE_NAME)); } - - s_sink_init = true; - } + }); return *s_default_sink; }