aboutsummaryrefslogtreecommitdiff
path: root/src/log.cpp
diff options
context:
space:
mode:
authorparadust7 <102263465+paradust7@users.noreply.github.com>2022-05-23 13:50:25 -0700
committerGitHub <noreply@github.com>2022-05-23 22:50:25 +0200
commit367a2d4b29a4865a8f2d5b9717786a8660f226bc (patch)
tree71a89df0512ec999f40684e4bbe9ff0cd9b796ac /src/log.cpp
parent0f9c78c3ebf920fac65030e66367b9940055075f (diff)
downloadminetest-367a2d4b29a4865a8f2d5b9717786a8660f226bc.tar.xz
Add missing concurrency protection in logger (#12325)
Diffstat (limited to 'src/log.cpp')
-rw-r--r--src/log.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/log.cpp b/src/log.cpp
index 51652fe0a..ef998f161 100644
--- a/src/log.cpp
+++ b/src/log.cpp
@@ -152,12 +152,14 @@ void Logger::addOutput(ILogOutput *out)
void Logger::addOutput(ILogOutput *out, LogLevel lev)
{
+ MutexAutoLock lock(m_mutex);
m_outputs[lev].push_back(out);
m_has_outputs[lev] = true;
}
void Logger::addOutputMasked(ILogOutput *out, LogLevelMask mask)
{
+ MutexAutoLock lock(m_mutex);
for (size_t i = 0; i < LL_MAX; i++) {
if (mask & LOGLEVEL_TO_MASKLEVEL(i)) {
m_outputs[i].push_back(out);
@@ -168,6 +170,7 @@ void Logger::addOutputMasked(ILogOutput *out, LogLevelMask mask)
void Logger::addOutputMaxLevel(ILogOutput *out, LogLevel lev)
{
+ MutexAutoLock lock(m_mutex);
assert(lev < LL_MAX);
for (size_t i = 0; i <= lev; i++) {
m_outputs[i].push_back(out);
@@ -177,6 +180,7 @@ void Logger::addOutputMaxLevel(ILogOutput *out, LogLevel lev)
LogLevelMask Logger::removeOutput(ILogOutput *out)
{
+ MutexAutoLock lock(m_mutex);
LogLevelMask ret_mask = 0;
for (size_t i = 0; i < LL_MAX; i++) {
std::vector<ILogOutput *>::iterator it;
@@ -386,6 +390,6 @@ void LogOutputBuffer::logRaw(LogLevel lev, const std::string &line)
default: break;
}
}
-
- m_buffer.push(color.append(line));
+ MutexAutoLock lock(m_buffer_mutex);
+ m_buffer.emplace(color.append(line));
}