diff options
-rw-r--r-- | xbmc/settings/Setting.cpp | 40 | ||||
-rw-r--r-- | xbmc/settings/Setting.h | 12 | ||||
-rw-r--r-- | xbmc/settings/SettingAddon.cpp | 6 | ||||
-rw-r--r-- | xbmc/settings/SettingPath.cpp | 4 | ||||
-rw-r--r-- | xbmc/settings/SettingsManager.cpp | 87 | ||||
-rw-r--r-- | xbmc/settings/SettingsManager.h | 5 |
6 files changed, 88 insertions, 66 deletions
diff --git a/xbmc/settings/Setting.cpp b/xbmc/settings/Setting.cpp index 6f3d5d09ba..355d586506 100644 --- a/xbmc/settings/Setting.cpp +++ b/xbmc/settings/Setting.cpp @@ -22,7 +22,6 @@ #include "Setting.h" #include "SettingsManager.h" -#include "threads/SingleLock.h" #include "utils/log.h" #include "utils/StringUtils.h" #include "utils/XBMCTinyXML.h" @@ -270,7 +269,7 @@ CSettingBool::CSettingBool(const std::string &id, int label, bool value, CSettin bool CSettingBool::Deserialize(const TiXmlNode *node, bool update /* = false */) { - CSingleLock lock(m_critical); + CExclusiveLock lock(m_critical); if (!CSetting::Deserialize(node, update)) return false; @@ -324,7 +323,7 @@ bool CSettingBool::CheckValidity(const std::string &value) const bool CSettingBool::SetValue(bool value) { - CSingleLock lock(m_critical); + CExclusiveLock lock(m_critical); if (value == m_value) return true; @@ -351,7 +350,7 @@ bool CSettingBool::SetValue(bool value) void CSettingBool::SetDefault(bool value) { - CSingleLock lock(m_critical); + CExclusiveLock lock(m_critical); m_default = value; if (!m_changed) @@ -368,8 +367,6 @@ void CSettingBool::copy(const CSettingBool &setting) bool CSettingBool::fromString(const std::string &strValue, bool &value) const { - CSingleLock lock(m_critical); - if (StringUtils::EqualsNoCase(strValue, "true")) { value = true; @@ -448,7 +445,7 @@ CSettingInt::CSettingInt(const std::string &id, int label, int value, const Stat bool CSettingInt::Deserialize(const TiXmlNode *node, bool update /* = false */) { - CSingleLock lock(m_critical); + CExclusiveLock lock(m_critical); if (!CSetting::Deserialize(node, update)) return false; @@ -586,7 +583,7 @@ bool CSettingInt::CheckValidity(int value) const bool CSettingInt::SetValue(int value) { - CSingleLock lock(m_critical); + CExclusiveLock lock(m_critical); if (value == m_value) return true; @@ -616,7 +613,7 @@ bool CSettingInt::SetValue(int value) void CSettingInt::SetDefault(int value) { - CSingleLock lock(m_critical); + CExclusiveLock lock(m_critical); m_default = value; if (!m_changed) @@ -625,6 +622,7 @@ void CSettingInt::SetDefault(int value) SettingOptionsType CSettingInt::GetOptionsType() const { + CSharedLock lock(m_critical); if (!m_options.empty()) return SettingOptionsTypeStatic; if (!m_optionsFiller.empty()) @@ -635,6 +633,7 @@ SettingOptionsType CSettingInt::GetOptionsType() const DynamicIntegerSettingOptions CSettingInt::UpdateDynamicOptions() { + CExclusiveLock lock(m_critical); DynamicIntegerSettingOptions options; if (m_optionsFiller.empty() || m_settingsManager == NULL) return options; @@ -676,6 +675,8 @@ void CSettingInt::copy(const CSettingInt &setting) { CSetting::Copy(setting); + CExclusiveLock lock(m_critical); + m_value = setting.m_value; m_default = setting.m_default; m_min = setting.m_min; @@ -727,7 +728,7 @@ CSettingNumber::CSettingNumber(const std::string &id, int label, float value, fl bool CSettingNumber::Deserialize(const TiXmlNode *node, bool update /* = false */) { - CSingleLock lock(m_critical); + CExclusiveLock lock(m_critical); if (!CSetting::Deserialize(node, update)) return false; @@ -783,6 +784,7 @@ std::string CSettingNumber::ToString() const bool CSettingNumber::Equals(const std::string &value) const { double dValue; + CSharedLock lock(m_critical); return (fromString(value, dValue) && m_value == dValue); } @@ -797,6 +799,7 @@ bool CSettingNumber::CheckValidity(const std::string &value) const bool CSettingNumber::CheckValidity(double value) const { + CSharedLock lock(m_critical); if (m_min != m_max && (value < m_min || value > m_max)) return false; @@ -806,7 +809,7 @@ bool CSettingNumber::CheckValidity(double value) const bool CSettingNumber::SetValue(double value) { - CSingleLock lock(m_critical); + CExclusiveLock lock(m_critical); if (value == m_value) return true; @@ -836,7 +839,7 @@ bool CSettingNumber::SetValue(double value) void CSettingNumber::SetDefault(double value) { - CSingleLock lock(m_critical); + CExclusiveLock lock(m_critical); m_default = value; if (!m_changed) @@ -846,6 +849,7 @@ void CSettingNumber::SetDefault(double value) void CSettingNumber::copy(const CSettingNumber &setting) { CSetting::Copy(setting); + CExclusiveLock lock(m_critical); m_value = setting.m_value; m_default = setting.m_default; @@ -892,7 +896,7 @@ CSettingString::CSettingString(const std::string &id, int label, const std::stri bool CSettingString::Deserialize(const TiXmlNode *node, bool update /* = false */) { - CSingleLock lock(m_critical); + CExclusiveLock lock(m_critical); if (!CSetting::Deserialize(node, update)) return false; @@ -940,6 +944,7 @@ bool CSettingString::Deserialize(const TiXmlNode *node, bool update /* = false * bool CSettingString::CheckValidity(const std::string &value) const { + CSharedLock lock(m_critical); if (!m_allowEmpty && value.empty()) return false; @@ -948,7 +953,7 @@ bool CSettingString::CheckValidity(const std::string &value) const bool CSettingString::SetValue(const std::string &value) { - CSingleLock lock(m_critical); + CExclusiveLock lock(m_critical); if (value == m_value) return true; @@ -978,7 +983,7 @@ bool CSettingString::SetValue(const std::string &value) void CSettingString::SetDefault(const std::string &value) { - CSingleLock lock(m_critical); + CSharedLock lock(m_critical); m_default = value; if (!m_changed) @@ -987,6 +992,7 @@ void CSettingString::SetDefault(const std::string &value) SettingOptionsType CSettingString::GetOptionsType() const { + CSharedLock lock(m_critical); if (!m_optionsFiller.empty()) return SettingOptionsTypeDynamic; @@ -995,6 +1001,7 @@ SettingOptionsType CSettingString::GetOptionsType() const DynamicStringSettingOptions CSettingString::UpdateDynamicOptions() { + CExclusiveLock lock(m_critical); DynamicStringSettingOptions options; if (m_optionsFiller.empty() || m_settingsManager == NULL) return options; @@ -1037,6 +1044,7 @@ void CSettingString::copy(const CSettingString &setting) { CSetting::Copy(setting); + CExclusiveLock lock(m_critical); m_value = setting.m_value; m_default = setting.m_default; m_allowEmpty = setting.m_allowEmpty; @@ -1061,7 +1069,7 @@ CSettingAction::CSettingAction(const std::string &id, const CSettingAction &sett bool CSettingAction::Deserialize(const TiXmlNode *node, bool update /* = false */) { - CSingleLock lock(m_critical); + CSharedLock lock(m_critical); if (!CSetting::Deserialize(node, update)) return false; diff --git a/xbmc/settings/Setting.h b/xbmc/settings/Setting.h index b8fbd2b06a..c65f5b4acc 100644 --- a/xbmc/settings/Setting.h +++ b/xbmc/settings/Setting.h @@ -29,7 +29,7 @@ #include "SettingControl.h" #include "SettingDependency.h" #include "SettingUpdate.h" -#include "threads/CriticalSection.h" +#include "threads/SharedSection.h" /*! \ingroup settings @@ -125,7 +125,7 @@ protected: SettingDependencies m_dependencies; std::set<CSettingUpdate> m_updates; bool m_changed; - CCriticalSection m_critical; + CSharedSection m_critical; }; typedef std::vector<CSetting *> SettingList; @@ -152,7 +152,7 @@ public: virtual bool CheckValidity(const std::string &value) const; virtual void Reset() { SetValue(m_default); } - bool GetValue() const { return m_value; } + bool GetValue() const { CSharedLock lock(m_critical); return m_value; } bool SetValue(bool value); bool GetDefault() const { return m_default; } void SetDefault(bool value); @@ -190,7 +190,7 @@ public: virtual bool CheckValidity(int value) const; virtual void Reset() { SetValue(m_default); } - int GetValue() const { return m_value; } + int GetValue() const { CSharedLock lock(m_critical); return m_value; } bool SetValue(int value); int GetDefault() const { return m_default; } void SetDefault(int value); @@ -247,7 +247,7 @@ public: virtual bool CheckValidity(double value) const; virtual void Reset() { SetValue(m_default); } - double GetValue() const { return m_value; } + double GetValue() const { CSharedLock lock(m_critical); return m_value; } bool SetValue(double value); double GetDefault() const { return m_default; } void SetDefault(double value); @@ -289,7 +289,7 @@ public: virtual bool CheckValidity(const std::string &value) const; virtual void Reset() { SetValue(m_default); } - virtual const std::string& GetValue() const { return m_value; } + virtual const std::string& GetValue() const { CSharedLock lock(m_critical); return m_value; } virtual bool SetValue(const std::string &value); virtual const std::string& GetDefault() const { return m_default; } virtual void SetDefault(const std::string &value); diff --git a/xbmc/settings/SettingAddon.cpp b/xbmc/settings/SettingAddon.cpp index d13227a8b0..497030bf0d 100644 --- a/xbmc/settings/SettingAddon.cpp +++ b/xbmc/settings/SettingAddon.cpp @@ -21,7 +21,6 @@ #include "SettingAddon.h" #include "addons/Addon.h" #include "settings/SettingsManager.h" -#include "threads/SingleLock.h" #include "utils/log.h" #include "utils/XBMCTinyXML.h" #include "utils/XMLUtils.h" @@ -45,7 +44,7 @@ CSettingAddon::CSettingAddon(const std::string &id, const CSettingAddon &setting bool CSettingAddon::Deserialize(const TiXmlNode *node, bool update /* = false */) { - CSingleLock lock(m_critical); + CExclusiveLock lock(m_critical); if (!CSettingString::Deserialize(node, update)) return false; @@ -84,6 +83,7 @@ bool CSettingAddon::Deserialize(const TiXmlNode *node, bool update /* = false */ void CSettingAddon::copy(const CSettingAddon &setting) { CSettingString::Copy(setting); - + + CExclusiveLock lock(m_critical); m_addonType = setting.m_addonType; } diff --git a/xbmc/settings/SettingPath.cpp b/xbmc/settings/SettingPath.cpp index 184b667194..f022e580a7 100644 --- a/xbmc/settings/SettingPath.cpp +++ b/xbmc/settings/SettingPath.cpp @@ -20,7 +20,6 @@ #include "SettingPath.h" #include "settings/SettingsManager.h" -#include "threads/SingleLock.h" #include "utils/log.h" #include "utils/StringUtils.h" #include "utils/XBMCTinyXML.h" @@ -46,7 +45,7 @@ CSettingPath::CSettingPath(const std::string &id, const CSettingPath &setting) bool CSettingPath::Deserialize(const TiXmlNode *node, bool update /* = false */) { - CSingleLock lock(m_critical); + CExclusiveLock lock(m_critical); if (!CSettingString::Deserialize(node, update)) return false; @@ -99,6 +98,7 @@ void CSettingPath::copy(const CSettingPath &setting) { CSettingString::Copy(setting); + CExclusiveLock lock(m_critical); m_writable = setting.m_writable; m_sources = setting.m_sources; } diff --git a/xbmc/settings/SettingsManager.cpp b/xbmc/settings/SettingsManager.cpp index bb0e656a88..1a10ee8444 100644 --- a/xbmc/settings/SettingsManager.cpp +++ b/xbmc/settings/SettingsManager.cpp @@ -21,7 +21,6 @@ #include "SettingsManager.h" #include "SettingSection.h" #include "Setting.h" -#include "threads/SingleLock.h" #include "utils/log.h" #include "utils/StringUtils.h" #include "utils/XBMCTinyXML.h" @@ -47,7 +46,8 @@ CSettingsManager::~CSettingsManager() bool CSettingsManager::Initialize(const TiXmlElement *root) { - CSingleLock lock(m_critical); + CExclusiveLock lock(m_critical); + CExclusiveLock settingsLock(m_settingsCritical); if (m_initialized || root == NULL) return false; @@ -154,7 +154,8 @@ bool CSettingsManager::Initialize(const TiXmlElement *root) bool CSettingsManager::Load(const TiXmlElement *root, bool &updated, bool triggerEvents /* = true */, std::map<std::string, CSetting*> *loadedSettings /* = NULL */) { - CSingleLock lock(m_critical); + CExclusiveLock lock(m_critical); + CExclusiveLock settingsLock(m_settingsCritical); if (m_loaded || root == NULL) return false; @@ -179,7 +180,8 @@ bool CSettingsManager::Load(const TiXmlElement *root, bool &updated, bool trigge bool CSettingsManager::Save(TiXmlNode *root) const { - CSingleLock lock(m_critical); + CSharedLock lock(m_critical); + CSharedLock settingsLock(m_settingsCritical); if (!m_initialized || root == NULL) return false; @@ -206,7 +208,7 @@ bool CSettingsManager::Save(TiXmlNode *root) const void CSettingsManager::Unload() { - CSingleLock lock(m_critical); + CExclusiveLock lock(m_settingsCritical); if (!m_loaded) return; @@ -222,7 +224,7 @@ void CSettingsManager::Unload() void CSettingsManager::Clear() { - CSingleLock lock(m_critical); + CExclusiveLock lock(m_critical); Unload(); m_settings.clear(); @@ -252,7 +254,7 @@ bool CSettingsManager::LoadSetting(const TiXmlNode *node, const std::string &set void CSettingsManager::SetInitialized() { - CSingleLock lock(m_critical); + CExclusiveLock lock(m_settingsCritical); if (m_initialized) return; @@ -268,7 +270,7 @@ void CSettingsManager::SetInitialized() void CSettingsManager::RegisterCallback(ISettingCallback *callback, const std::set<std::string> &settingList) { - CSingleLock lock(m_critical); + CExclusiveLock lock(m_settingsCritical); if (callback == NULL) return; @@ -294,14 +296,14 @@ void CSettingsManager::RegisterCallback(ISettingCallback *callback, const std::s void CSettingsManager::UnregisterCallback(ISettingCallback *callback) { - CSingleLock lock(m_critical); + CExclusiveLock lock(m_settingsCritical); for (SettingMap::iterator settingIt = m_settings.begin(); settingIt != m_settings.end(); ++settingIt) settingIt->second.callbacks.erase(callback); } void CSettingsManager::RegisterSettingType(const std::string &settingType, ISettingCreator *settingCreator) { - CSingleLock lock(m_critical); + CExclusiveLock lock(m_critical); if (settingType.empty() || settingCreator == NULL) return; @@ -315,7 +317,7 @@ void CSettingsManager::RegisterSettingsHandler(ISettingsHandler *settingsHandler if (settingsHandler == NULL) return; - CSingleLock lock(m_critical); + CExclusiveLock lock(m_critical); if (find(m_settingsHandlers.begin(), m_settingsHandlers.end(), settingsHandler) >= m_settingsHandlers.end()) m_settingsHandlers.push_back(settingsHandler); } @@ -325,13 +327,13 @@ void CSettingsManager::UnregisterSettingsHandler(ISettingsHandler *settingsHandl if (settingsHandler == NULL) return; - CSingleLock lock(m_critical); + CExclusiveLock lock(m_critical); m_settingsHandlers.erase(find(m_settingsHandlers.begin(), m_settingsHandlers.end(), settingsHandler)); } void CSettingsManager::RegisterSubSettings(ISubSettings *subSettings) { - CSingleLock lock(m_critical); + CExclusiveLock lock(m_critical); if (subSettings == NULL) return; @@ -340,7 +342,7 @@ void CSettingsManager::RegisterSubSettings(ISubSettings *subSettings) void CSettingsManager::UnregisterSubSettings(ISubSettings *subSettings) { - CSingleLock lock(m_critical); + CExclusiveLock lock(m_critical); if (subSettings == NULL) return; @@ -365,11 +367,13 @@ void CSettingsManager::RegisterSettingOptionsFiller(const std::string &identifie void CSettingsManager::UnregisterSettingOptionsFiller(const std::string &identifier) { + CExclusiveLock lock(m_critical); m_optionsFillers.erase(identifier); } void* CSettingsManager::GetSettingOptionsFiller(const CSetting *setting) { + CSharedLock lock(m_critical); if (setting == NULL) return NULL; @@ -419,7 +423,7 @@ void* CSettingsManager::GetSettingOptionsFiller(const CSetting *setting) CSetting* CSettingsManager::GetSetting(const std::string &id) const { - CSingleLock lock(m_critical); + CSharedLock lock(m_settingsCritical); if (id.empty()) return NULL; @@ -436,7 +440,7 @@ CSetting* CSettingsManager::GetSetting(const std::string &id) const CSettingSection* CSettingsManager::GetSection(const std::string §ion) const { - CSingleLock lock(m_critical); + CSharedLock lock(m_critical); if (section.empty()) return NULL; @@ -453,7 +457,7 @@ CSettingSection* CSettingsManager::GetSection(const std::string §ion) const SettingDependencyMap CSettingsManager::GetDependencies(const std::string &id) const { - CSingleLock lock(m_critical); + CSharedLock lock(m_settingsCritical); SettingMap::const_iterator setting = m_settings.find(id); if (setting == m_settings.end()) return SettingDependencyMap(); @@ -463,7 +467,6 @@ SettingDependencyMap CSettingsManager::GetDependencies(const std::string &id) co SettingDependencyMap CSettingsManager::GetDependencies(const CSetting *setting) const { - CSingleLock lock(m_critical); if (setting == NULL) return SettingDependencyMap(); @@ -472,7 +475,7 @@ SettingDependencyMap CSettingsManager::GetDependencies(const CSetting *setting) bool CSettingsManager::GetBool(const std::string &id) const { - CSingleLock lock(m_critical); + CSharedLock lock(m_settingsCritical); CSetting *setting = GetSetting(id); if (setting == NULL || setting->GetType() != SettingTypeBool) return false; @@ -482,7 +485,7 @@ bool CSettingsManager::GetBool(const std::string &id) const bool CSettingsManager::SetBool(const std::string &id, bool value) { - CSingleLock lock(m_critical); + CSharedLock lock(m_settingsCritical); CSetting *setting = GetSetting(id); if (setting == NULL || setting->GetType() != SettingTypeBool) return false; @@ -492,7 +495,7 @@ bool CSettingsManager::SetBool(const std::string &id, bool value) bool CSettingsManager::ToggleBool(const std::string &id) { - CSingleLock lock(m_critical); + CSharedLock lock(m_settingsCritical); CSetting *setting = GetSetting(id); if (setting == NULL || setting->GetType() != SettingTypeBool) return false; @@ -502,7 +505,7 @@ bool CSettingsManager::ToggleBool(const std::string &id) int CSettingsManager::GetInt(const std::string &id) const { - CSingleLock lock(m_critical); + CSharedLock lock(m_settingsCritical); CSetting *setting = GetSetting(id); if (setting == NULL || setting->GetType() != SettingTypeInteger) return 0; @@ -512,7 +515,7 @@ int CSettingsManager::GetInt(const std::string &id) const bool CSettingsManager::SetInt(const std::string &id, int value) { - CSingleLock lock(m_critical); + CSharedLock lock(m_settingsCritical); CSetting *setting = GetSetting(id); if (setting == NULL || setting->GetType() != SettingTypeInteger) return false; @@ -522,7 +525,7 @@ bool CSettingsManager::SetInt(const std::string &id, int value) double CSettingsManager::GetNumber(const std::string &id) const { - CSingleLock lock(m_critical); + CSharedLock lock(m_settingsCritical); CSetting *setting = GetSetting(id); if (setting == NULL || setting->GetType() != SettingTypeNumber) return 0.0; @@ -532,7 +535,7 @@ double CSettingsManager::GetNumber(const std::string &id) const bool CSettingsManager::SetNumber(const std::string &id, double value) { - CSingleLock lock(m_critical); + CSharedLock lock(m_settingsCritical); CSetting *setting = GetSetting(id); if (setting == NULL || setting->GetType() != SettingTypeNumber) return false; @@ -542,7 +545,7 @@ bool CSettingsManager::SetNumber(const std::string &id, double value) std::string CSettingsManager::GetString(const std::string &id) const { - CSingleLock lock(m_critical); + CSharedLock lock(m_settingsCritical); CSetting *setting = GetSetting(id); if (setting == NULL || setting->GetType() != SettingTypeString) return ""; @@ -552,7 +555,7 @@ std::string CSettingsManager::GetString(const std::string &id) const bool CSettingsManager::SetString(const std::string &id, const std::string &value) { - CSingleLock lock(m_critical); + CSharedLock lock(m_settingsCritical); CSetting *setting = GetSetting(id); if (setting == NULL || setting->GetType() != SettingTypeString) return false; @@ -562,6 +565,7 @@ bool CSettingsManager::SetString(const std::string &id, const std::string &value void CSettingsManager::AddCondition(const std::string &condition) { + CExclusiveLock lock(m_critical); if (condition.empty()) return; @@ -570,6 +574,7 @@ void CSettingsManager::AddCondition(const std::string &condition) void CSettingsManager::AddCondition(const std::string &identifier, SettingConditionCheck condition) { + CExclusiveLock lock(m_critical); if (identifier.empty() || condition == NULL) return; @@ -581,6 +586,8 @@ bool CSettingsManager::Serialize(TiXmlNode *parent) const if (parent == NULL) return false; + CSharedLock lock(m_settingsCritical); + for (SettingMap::const_iterator it = m_settings.begin(); it != m_settings.end(); ++it) { if (it->second.setting->GetType() == SettingTypeAction) @@ -626,6 +633,8 @@ bool CSettingsManager::Deserialize(const TiXmlNode *node, std::map<std::string, if (node == NULL) return false; + CSharedLock lock(m_settingsCritical); + for (SettingMap::iterator it = m_settings.begin(); it != m_settings.end(); ++it) { if (LoadSetting(node, it->second.setting) && loadedSettings != NULL) @@ -637,10 +646,10 @@ bool CSettingsManager::Deserialize(const TiXmlNode *node, std::map<std::string, bool CSettingsManager::OnSettingChanging(const CSetting *setting) { - CSingleLock lock(m_critical); if (setting == NULL) return false; + CSharedLock lock(m_settingsCritical); if (!m_loaded) return true; @@ -665,7 +674,7 @@ bool CSettingsManager::OnSettingChanging(const CSetting *setting) void CSettingsManager::OnSettingChanged(const CSetting *setting) { - CSingleLock lock(m_critical); + CSharedLock lock(m_settingsCritical); if (!m_loaded || setting == NULL) return; @@ -693,7 +702,7 @@ void CSettingsManager::OnSettingChanged(const CSetting *setting) void CSettingsManager::OnSettingAction(const CSetting *setting) { - CSingleLock lock(m_critical); + CSharedLock lock(m_settingsCritical); if (!m_loaded || setting == NULL) return; @@ -713,7 +722,7 @@ void CSettingsManager::OnSettingAction(const CSetting *setting) bool CSettingsManager::OnSettingUpdate(CSetting* &setting, const char *oldSettingId, const TiXmlNode *oldSettingNode) { - CSingleLock lock(m_critical); + CSharedLock lock(m_settingsCritical); if (setting == NULL) return false; @@ -736,7 +745,7 @@ bool CSettingsManager::OnSettingUpdate(CSetting* &setting, const char *oldSettin void CSettingsManager::OnSettingPropertyChanged(const CSetting *setting, const char *propertyName) { - CSingleLock lock(m_critical); + CSharedLock lock(m_settingsCritical); if (!m_loaded || setting == NULL) return; @@ -767,6 +776,7 @@ CSetting* CSettingsManager::CreateSetting(const std::string &settingType, const else if (StringUtils::EqualsNoCase(settingType, "action")) return new CSettingAction(settingId, (CSettingsManager*)this); + CSharedLock lock(m_critical); SettingCreatorMap::const_iterator creator = m_settingCreators.find(settingType); if (creator != m_settingCreators.end()) return creator->second->CreateSetting(settingType, settingId, (CSettingsManager*)this); @@ -776,7 +786,7 @@ CSetting* CSettingsManager::CreateSetting(const std::string &settingType, const bool CSettingsManager::OnSettingsLoading() { - CSingleLock lock(m_critical); + CSharedLock lock(m_critical); for (SettingsHandlers::const_iterator it = m_settingsHandlers.begin(); it != m_settingsHandlers.end(); ++it) { if (!(*it)->OnSettingsLoading()) @@ -788,14 +798,14 @@ bool CSettingsManager::OnSettingsLoading() void CSettingsManager::OnSettingsLoaded() { - CSingleLock lock(m_critical); + CSharedLock lock(m_critical); for (SettingsHandlers::const_iterator it = m_settingsHandlers.begin(); it != m_settingsHandlers.end(); ++it) (*it)->OnSettingsLoaded(); } bool CSettingsManager::OnSettingsSaving() const { - CSingleLock lock(m_critical); + CSharedLock lock(m_critical); for (SettingsHandlers::const_iterator it = m_settingsHandlers.begin(); it != m_settingsHandlers.end(); ++it) { if (!(*it)->OnSettingsSaving()) @@ -807,14 +817,14 @@ bool CSettingsManager::OnSettingsSaving() const void CSettingsManager::OnSettingsSaved() const { - CSingleLock lock(m_critical); + CSharedLock lock(m_critical); for (SettingsHandlers::const_iterator it = m_settingsHandlers.begin(); it != m_settingsHandlers.end(); ++it) (*it)->OnSettingsSaved(); } void CSettingsManager::OnSettingsCleared() { - CSingleLock lock(m_critical); + CSharedLock lock(m_critical); for (SettingsHandlers::const_iterator it = m_settingsHandlers.begin(); it != m_settingsHandlers.end(); ++it) (*it)->OnSettingsCleared(); } @@ -822,6 +832,7 @@ void CSettingsManager::OnSettingsCleared() bool CSettingsManager::Load(const TiXmlNode *settings) { bool ok = true; + CSharedLock lock(m_critical); for (std::set<ISubSettings*>::const_iterator it = m_subSettings.begin(); it != m_subSettings.end(); ++it) ok &= (*it)->Load(settings); @@ -865,6 +876,7 @@ bool CSettingsManager::LoadSetting(const TiXmlNode *node, CSetting *setting) bool CSettingsManager::UpdateSettings(const TiXmlNode *root) { bool updated = false; + CSharedLock lock(m_settingsCritical); for (SettingMap::iterator setting = m_settings.begin(); setting != m_settings.end(); ++setting) { @@ -963,6 +975,7 @@ void CSettingsManager::UpdateSettingByDependency(const std::string &settingId, c void CSettingsManager::RegisterSettingOptionsFiller(const std::string &identifier, void *filler, SettingOptionsFillerType type) { + CExclusiveLock lock(m_critical); SettingOptionsFillerMap::const_iterator it = m_optionsFillers.find(identifier); if (it != m_optionsFillers.end()) return; diff --git a/xbmc/settings/SettingsManager.h b/xbmc/settings/SettingsManager.h index 2a6f87aa72..36bbbcb0a9 100644 --- a/xbmc/settings/SettingsManager.h +++ b/xbmc/settings/SettingsManager.h @@ -30,7 +30,7 @@ #include "ISubSettings.h" #include "SettingConditions.h" #include "SettingDependency.h" -#include "threads/CriticalSection.h" +#include "threads/SharedSection.h" class CSettingSection; class CSettingUpdate; @@ -408,5 +408,6 @@ private: typedef std::map<std::string, SettingOptionsFiller> SettingOptionsFillerMap; SettingOptionsFillerMap m_optionsFillers; - CCriticalSection m_critical; + CSharedSection m_critical; + CSharedSection m_settingsCritical; }; |