Browse Source

Make plog_appender use its own mutex

Paul-Louis Ageneau 4 years ago
parent
commit
b02b30eea8
1 changed files with 4 additions and 2 deletions
  1. 4 2
      src/capi.cpp

+ 4 - 2
src/capi.cpp

@@ -200,7 +200,7 @@ public:
 	plog_appender(rtcLogCallbackFunc cb = nullptr) { set_callback(cb); }
 	plog_appender(rtcLogCallbackFunc cb = nullptr) { set_callback(cb); }
 
 
 	void set_callback(rtcLogCallbackFunc cb) {
 	void set_callback(rtcLogCallbackFunc cb) {
-		std::lock_guard lock(mutex);
+		std::lock_guard lock(callbackMutex);
 		callback = cb;
 		callback = cb;
 	}
 	}
 
 
@@ -215,7 +215,7 @@ public:
 #else
 #else
 		std::string str = formatted;
 		std::string str = formatted;
 #endif
 #endif
-		std::lock_guard lock(mutex);
+		std::lock_guard lock(callbackMutex);
 		if (callback)
 		if (callback)
 			callback(static_cast<rtcLogLevel>(record.getSeverity()), str.c_str());
 			callback(static_cast<rtcLogLevel>(record.getSeverity()), str.c_str());
 		else
 		else
@@ -224,6 +224,7 @@ public:
 
 
 private:
 private:
 	rtcLogCallbackFunc callback;
 	rtcLogCallbackFunc callback;
+	std::mutex callbackMutex;
 };
 };
 
 
 } // namespace
 } // namespace
@@ -231,6 +232,7 @@ 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;
 	const 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