diff options
author | Ryan Lortie <desrt@desrt.ca> | 2011-02-03 17:13:01 -0500 |
---|---|---|
committer | Ryan Lortie <desrt@desrt.ca> | 2011-02-03 17:13:01 -0500 |
commit | cf0eb5cce184198b2b3394bb30936ae58d649339 (patch) | |
tree | 7a7cd8e57ec24d918d9c97d3b0c88fd8ac877052 | |
parent | 3381a536337b69a3ba54543d69624fb2274ffa66 (diff) | |
download | dconf-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.c | 10 |
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); |