Browse Source

Make rtcInitLogger and InitLogger thread-safe

Paul-Louis Ageneau 4 years ago
parent
commit
64096d599c
2 changed files with 6 additions and 1 deletions
  1. 2 1
      src/capi.cpp
  2. 4 0
      src/log.cpp

+ 2 - 1
src/capi.cpp

@@ -230,7 +230,8 @@ private:
 
 
 void rtcInitLogger(rtcLogLevel level, rtcLogCallbackFunc cb) {
 void rtcInitLogger(rtcLogLevel level, rtcLogCallbackFunc cb) {
 	static std::optional<plog_appender> appender;
 	static std::optional<plog_appender> appender;
-	auto severity = static_cast<plog::Severity>(level);
+	const auto severity = static_cast<plog::Severity>(level);
+	std::lock_guard lock(mutex);
 	if (appender) {
 	if (appender) {
 		appender->set_callback(cb);
 		appender->set_callback(cb);
 		InitLogger(severity, nullptr); // change the severity
 		InitLogger(severity, nullptr); // change the severity

+ 4 - 0
src/log.cpp

@@ -24,6 +24,8 @@
 #include "plog/Log.h"
 #include "plog/Log.h"
 #include "plog/Logger.h"
 #include "plog/Logger.h"
 
 
+#include <mutex>
+
 namespace rtc {
 namespace rtc {
 
 
 void InitLogger(LogLevel level) { InitLogger(static_cast<plog::Severity>(level)); }
 void InitLogger(LogLevel level) { InitLogger(static_cast<plog::Severity>(level)); }
@@ -31,6 +33,8 @@ void InitLogger(LogLevel level) { InitLogger(static_cast<plog::Severity>(level))
 void InitLogger(plog::Severity severity, plog::IAppender *appender) {
 void InitLogger(plog::Severity severity, plog::IAppender *appender) {
 	static plog::ColorConsoleAppender<plog::TxtFormatter> consoleAppender;
 	static plog::ColorConsoleAppender<plog::TxtFormatter> consoleAppender;
 	static plog::Logger<0> *logger = nullptr;
 	static plog::Logger<0> *logger = nullptr;
+	static std::mutex mutex;
+	std::lock_guard lock(mutex);
 	if (!logger) {
 	if (!logger) {
 		logger = &plog::init(severity, appender ? appender : &consoleAppender);
 		logger = &plog::init(severity, appender ? appender : &consoleAppender);
 		PLOG_DEBUG << "Logger initialized";
 		PLOG_DEBUG << "Logger initialized";