[dconf] dconf engine: fix multi-threading issue



commit cf0eb5cce184198b2b3394bb30936ae58d649339
Author: Ryan Lortie <desrt desrt ca>
Date:   Thu Feb 3 17:13:01 2011 -0500

    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

 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);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]