summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyan Lortie <desrt@desrt.ca>2011-02-03 17:13:01 -0500
committerRyan Lortie <desrt@desrt.ca>2011-02-03 17:13:01 -0500
commitcf0eb5cce184198b2b3394bb30936ae58d649339 (patch)
tree7a7cd8e57ec24d918d9c97d3b0c88fd8ac877052
parent3381a536337b69a3ba54543d69624fb2274ffa66 (diff)
downloaddconf-cf0eb5cce184198b2b3394bb30936ae58d649339.tar.gz
dconf engine: fix multi-threading issue
Some weird issues have been popping up due to the multi-threaded nature of GSettings making use of the dconf engine. This patch tries to fix that. Closes #640611
-rw-r--r--engine/dconf-engine.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/engine/dconf-engine.c b/engine/dconf-engine.c
index 2a3ccbd..86cc9cc 100644
--- a/engine/dconf-engine.c
+++ b/engine/dconf-engine.c
@@ -238,8 +238,14 @@ dconf_engine_refresh_system (DConfEngine *engine)
static void
dconf_engine_refresh (DConfEngine *engine)
{
+ static GStaticMutex lock;
+
+ g_static_mutex_lock (&lock);
+
dconf_engine_refresh_system (engine);
dconf_engine_refresh_user (engine);
+
+ g_static_mutex_unlock (&lock);
}
guint64
@@ -421,7 +427,7 @@ dconf_engine_read_default (DConfEngine *engine,
GVariant *value = NULL;
gint i;
- dconf_engine_refresh_system (engine);
+ dconf_engine_refresh (engine);
for (i = 1; i < engine->n_dbs && value == NULL; i++)
value = gvdb_table_get_value (engine->gvdbs[i], key);
@@ -435,7 +441,7 @@ dconf_engine_read_no_default (DConfEngine *engine,
{
GVariant *value = NULL;
- dconf_engine_refresh_user (engine);
+ dconf_engine_refresh (engine);
if (engine->gvdbs[0])
value = gvdb_table_get_value (engine->gvdbs[0], key);