From 2ae5d3f3abc7ac5ee96c4dfc7eeead045fdc775e Mon Sep 17 00:00:00 2001 From: ShadowNinja Date: Thu, 11 Sep 2014 14:23:04 -0400 Subject: [PATCH] Fix Settings locking --- src/settings.h | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/src/settings.h b/src/settings.h index 6300ddd6..bfe7dd5a 100644 --- a/src/settings.h +++ b/src/settings.h @@ -741,9 +741,7 @@ public: void clear() { JMutexAutoLock lock(m_mutex); - - m_settings.clear(); - m_defaults.clear(); + clearNoLock(); } void updateValue(const Settings &other, const std::string &name) @@ -758,8 +756,6 @@ public: m_settings[name] = val; } catch (SettingNotFoundException &e) { } - - return; } void update(const Settings &other) @@ -770,17 +766,14 @@ public: JMutexAutoLock lock(m_mutex); JMutexAutoLock lock2(other.m_mutex); - m_settings.insert(other.m_settings.begin(), other.m_settings.end()); - m_defaults.insert(other.m_defaults.begin(), other.m_defaults.end()); - - return; + updateNoLock(other); } Settings & operator+=(const Settings &other) { update(other); - return *this; + return *this; } Settings & operator=(const Settings &other) @@ -791,14 +784,27 @@ public: JMutexAutoLock lock(m_mutex); JMutexAutoLock lock2(other.m_mutex); - - clear(); - update(other); + clearNoLock(); + updateNoLock(other); return *this; } private: + + void updateNoLock(const Settings &other) + { + m_settings.insert(other.m_settings.begin(), other.m_settings.end()); + m_defaults.insert(other.m_defaults.begin(), other.m_defaults.end()); + } + + void clearNoLock() + { + m_settings.clear(); + m_defaults.clear(); + } + + std::map m_settings; std::map m_defaults; // All methods that access m_settings/m_defaults directly should lock this.