diff options
author | paradust7 <102263465+paradust7@users.noreply.github.com> | 2022-05-23 13:50:25 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-05-23 22:50:25 +0200 |
commit | 367a2d4b29a4865a8f2d5b9717786a8660f226bc (patch) | |
tree | 71a89df0512ec999f40684e4bbe9ff0cd9b796ac /src/log.cpp | |
parent | 0f9c78c3ebf920fac65030e66367b9940055075f (diff) | |
download | minetest-367a2d4b29a4865a8f2d5b9717786a8660f226bc.tar.xz |
Add missing concurrency protection in logger (#12325)
Diffstat (limited to 'src/log.cpp')
-rw-r--r-- | src/log.cpp | 8 |
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)); } |