Make td::Log thread-safe.

GitOrigin-RevId: d1942c9b5ff72ea6ae100a0b4b65f1371f8ee534
This commit is contained in:
levlam 2018-09-01 22:44:20 +03:00
parent 642f5ed81a
commit 6a2cb7a466

View File

@ -11,8 +11,11 @@
#include "td/utils/logging.h" #include "td/utils/logging.h"
#include "td/utils/Slice.h" #include "td/utils/Slice.h"
#include <mutex>
namespace td { namespace td {
static std::mutex log_mutex;
static FileLog file_log; static FileLog file_log;
static TsLog ts_log(&file_log); static TsLog ts_log(&file_log);
static int64 max_log_file_size = 10 << 20; static int64 max_log_file_size = 10 << 20;
@ -24,6 +27,7 @@ static void fatal_error_callback_wrapper(CSlice message) {
} }
bool Log::set_file_path(string file_path) { bool Log::set_file_path(string file_path) {
std::lock_guard<std::mutex> lock(log_mutex);
if (file_path.empty()) { if (file_path.empty()) {
log_interface = default_log_interface; log_interface = default_log_interface;
return true; return true;
@ -38,17 +42,20 @@ bool Log::set_file_path(string file_path) {
} }
void Log::set_max_file_size(int64 max_file_size) { void Log::set_max_file_size(int64 max_file_size) {
std::lock_guard<std::mutex> lock(log_mutex);
max_log_file_size = max(max_file_size, static_cast<int64>(0)); max_log_file_size = max(max_file_size, static_cast<int64>(0));
file_log.set_rotate_threshold(max_log_file_size); file_log.set_rotate_threshold(max_log_file_size);
} }
void Log::set_verbosity_level(int new_verbosity_level) { void Log::set_verbosity_level(int new_verbosity_level) {
std::lock_guard<std::mutex> lock(log_mutex);
if (0 <= new_verbosity_level && new_verbosity_level <= 1024) { if (0 <= new_verbosity_level && new_verbosity_level <= 1024) {
SET_VERBOSITY_LEVEL(VERBOSITY_NAME(FATAL) + new_verbosity_level); SET_VERBOSITY_LEVEL(VERBOSITY_NAME(FATAL) + new_verbosity_level);
} }
} }
void Log::set_fatal_error_callback(FatalErrorCallbackPtr callback) { void Log::set_fatal_error_callback(FatalErrorCallbackPtr callback) {
std::lock_guard<std::mutex> lock(log_mutex);
if (callback == nullptr) { if (callback == nullptr) {
fatal_error_callback = nullptr; fatal_error_callback = nullptr;
set_log_fatal_error_callback(nullptr); set_log_fatal_error_callback(nullptr);