From 6bd4649fd0381a99d9ab370ae7ac06149d1458c1 Mon Sep 17 00:00:00 2001 From: water111 <48171810+water111@users.noreply.github.com> Date: Sat, 1 Oct 2022 12:29:08 -0400 Subject: [PATCH] fix deadlock on shutdown (#1937) --- common/log/log.cpp | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/common/log/log.cpp b/common/log/log.cpp index b1904a117f..2009bdad54 100644 --- a/common/log/log.cpp +++ b/common/log/log.cpp @@ -44,16 +44,12 @@ void log_message(level log_level, LogTime& now, const char* message) { char date_time_buffer[128]; time_t now_seconds = now.tv.tv_sec; auto now_milliseconds = now.tv.tv_usec / 1000; - strftime(date_time_buffer, 128, "%Y-%m-%d %H:%M:%S", localtime(&now_seconds)); - std::string date_string = fmt::format("[{}:{:03d}]", date_time_buffer, now_milliseconds); strftime(date_time_buffer, 128, "%M:%S", localtime(&now_seconds)); - std::string time_condensed = fmt::format("[{}]:{:03d}]", date_time_buffer, now_milliseconds); + std::string time_string = fmt::format("[{}:{:03d}]", date_time_buffer, now_milliseconds); #else char date_time_buffer[128]; - strftime(date_time_buffer, 128, "%Y-%m-%d %H:%M:%S", localtime(&now.tim)); - std::string date_string = fmt::format("[{}]", date_time_buffer); strftime(date_time_buffer, 128, "%M:%S", localtime(&now.tim)); - std::string time_condensed = fmt::format("[{}]", date_time_buffer); + std::string time_string = fmt::format("[{}]", date_time_buffer); #endif { @@ -61,7 +57,7 @@ void log_message(level log_level, LogTime& now, const char* message) { if (gLogger.fp && log_level >= gLogger.file_log_level) { // log to file std::string file_string = - fmt::format("{} [{}] {}\n", date_string, log_level_names[int(log_level)], message); + fmt::format("{} [{}] {}\n", time_string, log_level_names[int(log_level)], message); fwrite(file_string.c_str(), file_string.length(), 1, gLogger.fp); if (log_level >= gLogger.flush_level) { fflush(gLogger.fp); @@ -69,7 +65,7 @@ void log_message(level log_level, LogTime& now, const char* message) { } if (log_level >= gLogger.stdout_log_level) { - fmt::print("{} [", time_condensed); + fmt::print("{} [", time_string); fmt::print(fg(log_colors[int(log_level)]), "{}", log_level_names[int(log_level)]); fmt::print("] {}\n", message); if (log_level >= gLogger.flush_level) { @@ -80,7 +76,12 @@ void log_message(level log_level, LogTime& now, const char* message) { } if (log_level == level::die) { - exit(-1); + fflush(stdout); + fflush(stderr); + if (gLogger.fp) { + fflush(gLogger.fp); + } + abort(); } }