From: SmallJoker Date: Wed, 18 Sep 2019 16:48:23 +0000 (+0200) Subject: Settings: Prevent mutex deadlock in remove() (#7803) X-Git-Tag: 5.1.0~36 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=4271889ef832806e7bd57e552f15b24fdf162c8d;p=oweals%2Fminetest.git Settings: Prevent mutex deadlock in remove() (#7803) --- diff --git a/src/settings.cpp b/src/settings.cpp index 876c63e7b..c1fe41fa3 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -908,17 +908,20 @@ bool Settings::setNoiseParams(const std::string &name, bool Settings::remove(const std::string &name) { - MutexAutoLock lock(m_mutex); + // Lock as short as possible, unlock before doCallbacks() + m_mutex.lock(); SettingEntries::iterator it = m_settings.find(name); if (it != m_settings.end()) { delete it->second.group; m_settings.erase(it); + m_mutex.unlock(); doCallbacks(name); return true; } + m_mutex.unlock(); return false; }