summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engine/dconf-engine.c22
-rw-r--r--gsettings/dconfcontext.c6
-rw-r--r--gsettings/dconfsettingsbackend.c37
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