summaryrefslogtreecommitdiffstats
path: root/sigscript
diff options
context:
space:
mode:
authorBen Boeckel <MathStuf@gmail.com>2009-03-17 19:06:45 -0400
committerBen Boeckel <MathStuf@gmail.com>2009-03-17 19:06:45 -0400
commitf59bbe43dacc5a17a8917d3b67e7d79f46e2bd72 (patch)
treed88962857a457b5a89a7bcba5ad4c2c5fd2246c0 /sigscript
parentdf534e696682af6706c0497f0717203f6ea5ab93 (diff)
downloadsigen-f59bbe43dacc5a17a8917d3b67e7d79f46e2bd72.tar.gz
sigen-f59bbe43dacc5a17a8917d3b67e7d79f46e2bd72.tar.xz
sigen-f59bbe43dacc5a17a8917d3b67e7d79f46e2bd72.zip
Tighten up locking the mutex for writing
Diffstat (limited to 'sigscript')
-rw-r--r--sigscript/Config.cpp20
1 files changed, 10 insertions, 10 deletions
diff --git a/sigscript/Config.cpp b/sigscript/Config.cpp
index 6f8fbf59..9218ee96 100644
--- a/sigscript/Config.cpp
+++ b/sigscript/Config.cpp
@@ -39,14 +39,13 @@ bool Config::addValue(const QString& name, const QVariant& value)
bool Config::setValue(const QString& name, const QVariant& value)
{
- QWriteLocker locker(&m_lock);
if (m_values.contains(name) && (m_values[name].second & ReadOnly))
return false;
- if (!m_values.contains(name) || (m_values[name].second & Deleted))
- {
- m_values[name].second &= ~Deleted;
+ if (!m_values.contains(name))
emit(valueAdded(name, value));
- }
+ if (m_values[name].second & Deleted)
+ unsetOptions(name, Deleted);
+ QWriteLocker locker(&m_lock);
m_values[name] = Value(value, 0);
emit(valueChanged(name, value));
return true;
@@ -54,11 +53,13 @@ bool Config::setValue(const QString& name, const QVariant& value)
bool Config::removeValue(const QString& name, const bool shadow)
{
- QWriteLocker locker(&m_lock);
if (shadow)
setOptions(name, Deleted);
else if (m_values.contains(name))
+ {
+ QWriteLocker locker(&m_lock);
m_values.remove(name);
+ }
else
return false;
emit(valueRemoved(name));
@@ -105,9 +106,9 @@ QStringList Config::values(const bool recursive) const
bool Config::setOptions(const QString& name, const Options options)
{
- QWriteLocker locker(&m_lock);
- if (m_values.contains(name) && ((~m_values[name].second) & options))
+ if ((m_values.contains(name) && (~m_values[name].second & options)) || addValue(name, QVariant()))
{
+ QWriteLocker locker(&m_lock);
m_values[name].second |= options;
emit(optionsChanged(name, options));
return true;
@@ -117,9 +118,9 @@ bool Config::setOptions(const QString& name, const Options options)
bool Config::unsetOptions(const QString& name, const Options options)
{
- QWriteLocker locker(&m_lock);
if (m_values.contains(name) && (m_values[name].second & options))
{
+ QWriteLocker locker(&m_lock);
m_values[name].second &= ~options;
emit(optionsChanged(name, options));
return true;
@@ -139,7 +140,6 @@ Config::Options Config::options(const QString& name, const bool recursive) const
void Config::clean()
{
-// QWriteLocker locker(&m_lock);
for (QMutableMapIterator<QString, Value> i(m_values); i.hasNext(); i.next())
{
unsetOptions(i.key(), Hidden);