From 4271889ef832806e7bd57e552f15b24fdf162c8d Mon Sep 17 00:00:00 2001 From: SmallJoker Date: Wed, 18 Sep 2019 18:48:23 +0200 Subject: Settings: Prevent mutex deadlock in remove() (#7803) --- src/settings.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src/settings.cpp') 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; } -- cgit v1.2.3