aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--xbmc/settings/Setting.cpp40
-rw-r--r--xbmc/settings/Setting.h12
-rw-r--r--xbmc/settings/SettingAddon.cpp6
-rw-r--r--xbmc/settings/SettingPath.cpp4
-rw-r--r--xbmc/settings/SettingsManager.cpp87
-rw-r--r--xbmc/settings/SettingsManager.h5
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 &section) const
{
- CSingleLock lock(m_critical);
+ CSharedLock lock(m_critical);
if (section.empty())
return NULL;
@@ -453,7 +457,7 @@ CSettingSection* CSettingsManager::GetSection(const std::string &section) 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;
};