diff options
-rw-r--r-- | engine/dconf-engine.c | 22 | ||||
-rw-r--r-- | gsettings/dconfcontext.c | 6 | ||||
-rw-r--r-- | gsettings/dconfsettingsbackend.c | 37 |
3 files changed, 31 insertions, 34 deletions
diff --git a/engine/dconf-engine.c b/engine/dconf-engine.c index b83954d..13ccd29 100644 --- a/engine/dconf-engine.c +++ b/engine/dconf-engine.c @@ -73,7 +73,7 @@ dconf_engine_get_session_dir (void) struct _DConfEngine { - GStaticMutex lock; + GMutex lock; guint64 state; guint8 *shm; @@ -202,12 +202,12 @@ dconf_engine_get_state (DConfEngine *engine) { guint64 state; - g_static_mutex_lock (&engine->lock); + g_mutex_lock (&engine->lock); dconf_engine_refresh (engine); state = engine->state; - g_static_mutex_unlock (&engine->lock); + g_mutex_unlock (&engine->lock); return state; } @@ -280,7 +280,7 @@ dconf_engine_new (const gchar *profile) gint i; engine = g_slice_new (DConfEngine); - g_static_mutex_init (&engine->lock); + g_mutex_init (&engine->lock); engine->shm = NULL; if (profile == NULL) @@ -355,7 +355,7 @@ dconf_engine_free (DConfEngine *engine) munmap (engine->shm, 1); } - g_static_mutex_free (&engine->lock); + g_mutex_clear (&engine->lock); g_free (engine->object_paths); g_free (engine->bus_types); @@ -377,7 +377,7 @@ dconf_engine_read_internal (DConfEngine *engine, gint limit; gint i; - g_static_mutex_lock (&engine->lock); + g_mutex_lock (&engine->lock); dconf_engine_refresh (engine); @@ -409,7 +409,7 @@ dconf_engine_read_internal (DConfEngine *engine, i++; } - g_static_mutex_unlock (&engine->lock); + g_mutex_unlock (&engine->lock); return value; } @@ -497,7 +497,7 @@ dconf_engine_is_writable (DConfEngine *engine, { gint i; - g_static_mutex_lock (&engine->lock); + g_mutex_lock (&engine->lock); dconf_engine_refresh_system (engine); @@ -510,7 +510,7 @@ dconf_engine_is_writable (DConfEngine *engine, break; } - g_static_mutex_unlock (&engine->lock); + g_mutex_unlock (&engine->lock); } return writable; @@ -645,7 +645,7 @@ dconf_engine_list (DConfEngine *engine, /* not yet supported */ g_assert (resets == NULL); - g_static_mutex_lock (&engine->lock); + g_mutex_lock (&engine->lock); dconf_engine_refresh (engine); @@ -660,7 +660,7 @@ dconf_engine_list (DConfEngine *engine, if (length) *length = g_strv_length (list); - g_static_mutex_unlock (&engine->lock); + g_mutex_unlock (&engine->lock); return list; } diff --git a/gsettings/dconfcontext.c b/gsettings/dconfcontext.c index 339507e..5e11980 100644 --- a/gsettings/dconfcontext.c +++ b/gsettings/dconfcontext.c @@ -24,10 +24,8 @@ dconf_context_get (void) GThread *thread; context = g_main_context_new (); - thread = g_thread_create (dconf_context_thread, - context, FALSE, NULL); - g_assert (thread != NULL); - + thread = g_thread_new ("dconf worker", dconf_context_thread, context); + g_thread_unref (thread); g_once_init_leave (&initialised, 1); } diff --git a/gsettings/dconfsettingsbackend.c b/gsettings/dconfsettingsbackend.c index dc035ab..cdf0550 100644 --- a/gsettings/dconfsettingsbackend.c +++ b/gsettings/dconfsettingsbackend.c @@ -44,8 +44,9 @@ typedef struct gchar *anti_expose_tag; DConfEngine *engine; - GStaticMutex lock; - GCond *sync_cond; + GMutex lock; + GCond sync_cond; + gint sync_waiters; } DConfSettingsBackend; static GType dconf_settings_backend_get_type (void); @@ -252,7 +253,7 @@ dconf_settings_backend_outstanding_returned (GObject *source, /* One way or another we no longer need this hooked into the list. */ - g_static_mutex_lock (&dcsb->lock); + g_mutex_lock (&dcsb->lock); { Outstanding **tmp; @@ -263,10 +264,10 @@ dconf_settings_backend_outstanding_returned (GObject *source, break; } - if (dcsb->outstanding == NULL && dcsb->sync_cond) - g_cond_broadcast (dcsb->sync_cond); + if (dcsb->outstanding == NULL && dcsb->sync_waiters) + g_cond_broadcast (&dcsb->sync_cond); } - g_static_mutex_unlock (&dcsb->lock); + g_mutex_unlock (&dcsb->lock); reply = dconf_settings_backend_send_finish (source, result); @@ -346,10 +347,10 @@ dconf_settings_backend_queue (DConfSettingsBackend *dcsb, outstanding->set_value = set_value ? g_variant_ref_sink (set_value) : NULL; outstanding->tree = tree ? g_tree_ref (tree) : NULL; - g_static_mutex_lock (&dcsb->lock); + g_mutex_lock (&dcsb->lock); outstanding->next = dcsb->outstanding; dcsb->outstanding = outstanding; - g_static_mutex_unlock (&dcsb->lock); + g_mutex_unlock (&dcsb->lock); g_main_context_invoke (dconf_context_get (), dconf_settings_backend_send_outstanding, @@ -393,7 +394,7 @@ dconf_settings_backend_scan_outstanding (DConfSettingsBackend *backend, if G_LIKELY (backend->outstanding == NULL) return FALSE; - g_static_mutex_lock (&backend->lock); + g_mutex_lock (&backend->lock); for (node = backend->outstanding; node; node = node->next) { @@ -429,7 +430,7 @@ dconf_settings_backend_scan_outstanding (DConfSettingsBackend *backend, } } - g_static_mutex_unlock (&backend->lock); + g_mutex_unlock (&backend->lock); return found; } @@ -645,24 +646,22 @@ dconf_settings_backend_sync (GSettingsBackend *backend) if (!dcsb->outstanding) return; - g_static_mutex_lock (&dcsb->lock); - - g_assert (dcsb->sync_cond == NULL); - dcsb->sync_cond = g_cond_new (); + g_mutex_lock (&dcsb->lock); + dcsb->sync_waiters++; while (dcsb->outstanding) - g_cond_wait (dcsb->sync_cond, g_static_mutex_get_mutex (&dcsb->lock)); - - g_cond_free (dcsb->sync_cond); - dcsb->sync_cond = NULL; + g_cond_wait (&dcsb->sync_cond, &dcsb->lock); + dcsb->sync_waiters--; - g_static_mutex_unlock (&dcsb->lock); + g_mutex_unlock (&dcsb->lock); } static void dconf_settings_backend_init (DConfSettingsBackend *dcsb) { dcsb->engine = dconf_engine_new (NULL); + g_mutex_init (&dcsb->lock); + g_cond_init (&dcsb->sync_cond); } static void |