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; }