[Xfce4-commits] <tumbler:master> Don't use deprecated glib 2.32 API.

Nick Schermer noreply at xfce.org
Sat Dec 8 00:20:02 CET 2012


Updating branch refs/heads/master
         to cdea35f8845595383d55ccbe89e2a9cb3b755d21 (commit)
       from 59ec6358a566fe07a9d1ce9e3b2898b524c9d7b0 (commit)

commit cdea35f8845595383d55ccbe89e2a9cb3b755d21
Author: Nick Schermer <nick at xfce.org>
Date:   Fri Dec 7 23:10:31 2012 +0100

    Don't use deprecated glib 2.32 API.

 tumblerd/main.c                            |    2 +
 tumblerd/tumbler-cache-service.c           |   28 ++++++------
 tumblerd/tumbler-group-scheduler.c         |   39 ++++++++--------
 tumblerd/tumbler-lifecycle-manager.c       |   35 ++++++++-------
 tumblerd/tumbler-lifo-scheduler.c          |   39 ++++++++--------
 tumblerd/tumbler-manager.c                 |   68 ++++++++++++++--------------
 tumblerd/tumbler-registry.c                |   43 +++++++++---------
 tumblerd/tumbler-service.c                 |   32 +++++++-------
 tumblerd/tumbler-specialized-thumbnailer.c |   46 +++++++++++++++---
 tumblerd/tumbler-utils.h                   |   14 ++++++
 10 files changed, 199 insertions(+), 147 deletions(-)

diff --git a/tumblerd/main.c b/tumblerd/main.c
index e34b135..c42989d 100644
--- a/tumblerd/main.c
+++ b/tumblerd/main.c
@@ -85,9 +85,11 @@ main (int    argc,
   /* initialize the GLib type system */
   g_type_init ();
 
+#if !GLIB_CHECK_VERSION (2, 32, 0)
   /* initialize threading system */
   if (!g_thread_supported ())
     g_thread_init (NULL);
+#endif
 
   /* initial the D-Bus threading system */
   dbus_g_thread_init ();
diff --git a/tumblerd/tumbler-cache-service.c b/tumblerd/tumbler-cache-service.c
index d9ecfe6..47d0b8e 100644
--- a/tumblerd/tumbler-cache-service.c
+++ b/tumblerd/tumbler-cache-service.c
@@ -94,7 +94,7 @@ struct _TumblerCacheService
   GThreadPool     *delete_pool;
   GThreadPool     *cleanup_pool;
 
-  GMutex          *mutex;
+  TUMBLER_MUTEX    (mutex);
 };
 
 struct _MoveRequest
@@ -150,7 +150,7 @@ tumbler_cache_service_class_init (TumblerCacheServiceClass *klass)
 static void
 tumbler_cache_service_init (TumblerCacheService *service)
 {
-  service->mutex = g_mutex_new ();
+  tumbler_mutex_create (service->mutex);
 }
 
 
@@ -202,7 +202,7 @@ tumbler_cache_service_finalize (GObject *object)
 
   dbus_g_connection_unref (service->connection);
 
-  g_mutex_free (service->mutex);
+  tumbler_mutex_free (service->mutex);
 
   (*G_OBJECT_CLASS (tumbler_cache_service_parent_class)->finalize) (object);
 }
@@ -261,7 +261,7 @@ tumbler_cache_service_move_thread (gpointer data,
   g_return_if_fail (TUMBLER_IS_CACHE_SERVICE (service));
   g_return_if_fail (request != NULL);
 
-  g_mutex_lock (service->mutex);
+  tumbler_mutex_lock (service->mutex);
 
   if (service->cache != NULL)
     {
@@ -278,7 +278,7 @@ tumbler_cache_service_move_thread (gpointer data,
    * other requests are still to be processed) */
   tumbler_component_decrement_use_count (TUMBLER_COMPONENT (service));
 
-  g_mutex_unlock (service->mutex);
+  tumbler_mutex_unlock (service->mutex);
 }
 
 
@@ -293,7 +293,7 @@ tumbler_cache_service_copy_thread (gpointer data,
   g_return_if_fail (TUMBLER_IS_CACHE_SERVICE (service));
   g_return_if_fail (request != NULL);
 
-  g_mutex_lock (service->mutex);
+  tumbler_mutex_lock (service->mutex);
 
   if (service->cache != NULL)
     {
@@ -310,7 +310,7 @@ tumbler_cache_service_copy_thread (gpointer data,
    * other requests are still to be processed) */
   tumbler_component_decrement_use_count (TUMBLER_COMPONENT (service));
 
-  g_mutex_unlock (service->mutex);
+  tumbler_mutex_unlock (service->mutex);
 }
 
 
@@ -325,7 +325,7 @@ tumbler_cache_service_delete_thread (gpointer data,
   g_return_if_fail (TUMBLER_IS_CACHE_SERVICE (service));
   g_return_if_fail (request != NULL);
 
-  g_mutex_lock (service->mutex);
+  tumbler_mutex_lock (service->mutex);
 
   if (service->cache != NULL)
     tumbler_cache_delete (service->cache, (const gchar *const *)request->uris);
@@ -337,7 +337,7 @@ tumbler_cache_service_delete_thread (gpointer data,
    * other requests are still to be processed) */
   tumbler_component_decrement_use_count (TUMBLER_COMPONENT (service));
 
-  g_mutex_unlock (service->mutex);
+  tumbler_mutex_unlock (service->mutex);
 }
 
 
@@ -352,7 +352,7 @@ tumbler_cache_service_cleanup_thread (gpointer data,
   g_return_if_fail (TUMBLER_IS_CACHE_SERVICE (service));
   g_return_if_fail (request != NULL);
 
-  g_mutex_lock (service->mutex);
+  tumbler_mutex_lock (service->mutex);
 
   if (service->cache != NULL)
     {
@@ -368,7 +368,7 @@ tumbler_cache_service_cleanup_thread (gpointer data,
    * other requests are still to be processed) */
   tumbler_component_decrement_use_count (TUMBLER_COMPONENT (service));
 
-  g_mutex_unlock (service->mutex);
+  tumbler_mutex_unlock (service->mutex);
 }
 
 
@@ -395,7 +395,7 @@ tumbler_cache_service_start (TumblerCacheService *service,
   g_return_val_if_fail (TUMBLER_IS_CACHE_SERVICE (service), FALSE);
   g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
-  g_mutex_lock (service->mutex);
+  tumbler_mutex_lock (service->mutex);
 
   /* get the native D-Bus connection */
   connection = dbus_g_connection_get_connection (service->connection);
@@ -413,12 +413,12 @@ tumbler_cache_service_start (TumblerCacheService *service,
                        _("Another thumbnail cache service is already running"));
         }
 
-      g_mutex_unlock (service->mutex);
+      tumbler_mutex_unlock (service->mutex);
 
       return FALSE;
     }
   
-  g_mutex_unlock (service->mutex);
+  tumbler_mutex_unlock (service->mutex);
 
   return TRUE;
 }
diff --git a/tumblerd/tumbler-group-scheduler.c b/tumblerd/tumbler-group-scheduler.c
index 1e3dd2c..49cc70d 100644
--- a/tumblerd/tumbler-group-scheduler.c
+++ b/tumblerd/tumbler-group-scheduler.c
@@ -34,6 +34,7 @@
 
 #include <tumblerd/tumbler-group-scheduler.h>
 #include <tumblerd/tumbler-scheduler.h>
+#include <tumblerd/tumbler-utils.h>
 
 
 
@@ -93,7 +94,7 @@ struct _TumblerGroupScheduler
   GObject __parent__;
 
   GThreadPool *pool;
-  GMutex      *mutex;
+  TUMBLER_MUTEX (mutex);
   GList       *requests;
   guint        group;
   gboolean     prioritized;
@@ -151,7 +152,7 @@ tumbler_group_scheduler_iface_init (TumblerSchedulerIface *iface)
 static void
 tumbler_group_scheduler_init (TumblerGroupScheduler *scheduler)
 {
-  scheduler->mutex = g_mutex_new ();
+  tumbler_mutex_create (scheduler->mutex);
   scheduler->requests = NULL;
 
   /* Note that unless we convert this boolean to a TLS (thread-local), that
@@ -187,7 +188,7 @@ tumbler_group_scheduler_finalize (GObject *object)
   g_free (scheduler->name);
 
   /* destroy the mutex */
-  g_mutex_free (scheduler->mutex);
+  tumbler_mutex_free (scheduler->mutex);
 
   (*G_OBJECT_CLASS (tumbler_group_scheduler_parent_class)->finalize) (object);
 }
@@ -246,7 +247,7 @@ tumbler_group_scheduler_push (TumblerScheduler        *scheduler,
   g_return_if_fail (TUMBLER_IS_GROUP_SCHEDULER (scheduler));
   g_return_if_fail (request != NULL);
 
-  g_mutex_lock (group_scheduler->mutex);
+  tumbler_mutex_lock (group_scheduler->mutex);
   
   /* gain ownership over the requests (sets request->scheduler) */
   tumbler_scheduler_take_request (scheduler, request);
@@ -257,7 +258,7 @@ tumbler_group_scheduler_push (TumblerScheduler        *scheduler,
   /* enqueue the request in the pool */
   g_thread_pool_push (group_scheduler->pool, request, NULL);
 
-  g_mutex_unlock (group_scheduler->mutex);
+  tumbler_mutex_unlock (group_scheduler->mutex);
 }
 
 
@@ -272,14 +273,14 @@ tumbler_group_scheduler_dequeue (TumblerScheduler *scheduler,
   g_return_if_fail (TUMBLER_IS_GROUP_SCHEDULER (scheduler));
   g_return_if_fail (handle != 0);
 
-  g_mutex_lock (group_scheduler->mutex);
+  tumbler_mutex_lock (group_scheduler->mutex);
 
   /* dequeue all requests (usually only one) with this handle */
   g_list_foreach (group_scheduler->requests, 
                   (GFunc) tumbler_group_scheduler_dequeue_request, 
                   GUINT_TO_POINTER (handle));
 
-  g_mutex_unlock (group_scheduler->mutex);
+  tumbler_mutex_unlock (group_scheduler->mutex);
 }
 
 
@@ -301,7 +302,7 @@ tumbler_group_scheduler_cancel_by_mount (TumblerScheduler *scheduler,
   /* determine the root mount point */
   mount_point = g_mount_get_root (mount);
 
-  g_mutex_lock (group_scheduler->mutex);
+  tumbler_mutex_lock (group_scheduler->mutex);
 
   /* iterate over all requests */
   for (iter = group_scheduler->requests; iter != NULL; iter = iter->next)
@@ -323,7 +324,7 @@ tumbler_group_scheduler_cancel_by_mount (TumblerScheduler *scheduler,
         }
     }
 
-  g_mutex_unlock (group_scheduler->mutex);
+  tumbler_mutex_unlock (group_scheduler->mutex);
 
   /* release the mount point */
   g_object_unref (mount_point);
@@ -438,27 +439,27 @@ tumbler_group_scheduler_thread (gpointer data,
                          request->origin);
 
   /* finish the request if it was dequeued */
-  g_mutex_lock (scheduler->mutex);
+  tumbler_mutex_lock (scheduler->mutex);
   if (request->dequeued)
     {
       tumbler_group_scheduler_finish_request (scheduler, request);
-      g_mutex_unlock (scheduler->mutex);
+      tumbler_mutex_unlock (scheduler->mutex);
       return;
     }
-  g_mutex_unlock (scheduler->mutex);
+  tumbler_mutex_unlock (scheduler->mutex);
 
   /* process URI by URI */
   for (n = 0; n < request->length; ++n)
     {
       /* finish the request if it was dequeued */
-      g_mutex_lock (scheduler->mutex);
+      tumbler_mutex_lock (scheduler->mutex);
       if (request->dequeued)
         {
           tumbler_group_scheduler_finish_request (scheduler, request);
-          g_mutex_unlock (scheduler->mutex);
+          tumbler_mutex_unlock (scheduler->mutex);
           return;
         }
-      g_mutex_unlock (scheduler->mutex);
+      tumbler_mutex_unlock (scheduler->mutex);
 
       /* ignore the the URI if has been cancelled already */
       if (g_cancellable_is_cancelled (request->cancellables[n]))
@@ -537,13 +538,13 @@ tumbler_group_scheduler_thread (gpointer data,
       n = GPOINTER_TO_INT (lp->data);
 
       /* finish the request if it was dequeued */
-      g_mutex_lock (scheduler->mutex);
+      tumbler_mutex_lock (scheduler->mutex);
       if (request->dequeued)
         {
           tumbler_group_scheduler_finish_request (scheduler, request);
           return;
         }
-      g_mutex_unlock (scheduler->mutex);
+      tumbler_mutex_unlock (scheduler->mutex);
 
       /* connect to the error signal of the thumbnailer */
       g_signal_connect (request->thumbnailers[n], "error", 
@@ -566,7 +567,7 @@ tumbler_group_scheduler_thread (gpointer data,
                                             0, 0, NULL, NULL, request);
     }
 
-  g_mutex_lock (scheduler->mutex);
+  tumbler_mutex_lock (scheduler->mutex);
 
   /* We emit all the errors and ready signals together in order to 
    * reduce the overall D-Bus traffic */
@@ -649,7 +650,7 @@ tumbler_group_scheduler_thread (gpointer data,
   /* notify others that we're finished processing the request */
   tumbler_group_scheduler_finish_request (scheduler, request);
 
-  g_mutex_unlock (scheduler->mutex);
+  tumbler_mutex_unlock (scheduler->mutex);
 }
 
 
diff --git a/tumblerd/tumbler-lifecycle-manager.c b/tumblerd/tumbler-lifecycle-manager.c
index 00a381c..ee4ae10 100644
--- a/tumblerd/tumbler-lifecycle-manager.c
+++ b/tumblerd/tumbler-lifecycle-manager.c
@@ -29,6 +29,7 @@
 #include <tumbler/tumbler.h>
 
 #include <tumblerd/tumbler-lifecycle-manager.h>
+#include <tumblerd/tumbler-utils.h>
 
 
 
@@ -58,7 +59,7 @@ struct _TumblerLifecycleManager
 {
   GObject __parent__;
 
-  GMutex *lock;
+  TUMBLER_MUTEX (lock);
 
   guint   timeout_id;
   guint   component_use_count;
@@ -103,7 +104,7 @@ tumbler_lifecycle_manager_class_init (TumblerLifecycleManagerClass *klass)
 static void
 tumbler_lifecycle_manager_init (TumblerLifecycleManager *manager)
 {
-  manager->lock = g_mutex_new ();
+  tumbler_mutex_create (manager->lock);
   manager->timeout_id = 0;
   manager->component_use_count = 0;
   manager->shutdown_emitted = FALSE;
@@ -114,9 +115,11 @@ tumbler_lifecycle_manager_init (TumblerLifecycleManager *manager)
 static void
 tumbler_lifecycle_manager_finalize (GObject *object)
 {
+#if !GLIB_CHECK_VERSION (2, 32, 0)
   TumblerLifecycleManager *manager = TUMBLER_LIFECYCLE_MANAGER (object);
+#endif
 
-  g_mutex_free (manager->lock);
+  tumbler_mutex_free (TUMBLER_LIFECYCLE_MANAGER (object)->lock);
 
   (*G_OBJECT_CLASS (tumbler_lifecycle_manager_parent_class)->finalize) (object);
 }
@@ -128,12 +131,12 @@ tumbler_lifecycle_manager_timeout (TumblerLifecycleManager *manager)
 {
   g_return_val_if_fail (TUMBLER_IS_LIFECYCLE_MANAGER (manager), FALSE);
 
-  g_mutex_lock (manager->lock);
+  tumbler_mutex_lock (manager->lock);
 
   /* reschedule the timeout if one of the components is still in use */
   if (manager->component_use_count > 0)
     {
-      g_mutex_unlock (manager->lock);
+      tumbler_mutex_unlock (manager->lock);
       return TRUE;
     }
 
@@ -147,7 +150,7 @@ tumbler_lifecycle_manager_timeout (TumblerLifecycleManager *manager)
    * reschedule the timeout */
   manager->shutdown_emitted = TRUE;
 
-  g_mutex_unlock (manager->lock);
+  tumbler_mutex_unlock (manager->lock);
 
   return FALSE;
 }
@@ -167,12 +170,12 @@ tumbler_lifecycle_manager_start (TumblerLifecycleManager *manager)
 {
   g_return_if_fail (TUMBLER_IS_LIFECYCLE_MANAGER (manager));
 
-  g_mutex_lock (manager->lock);
+  tumbler_mutex_lock (manager->lock);
 
   /* ignore if there already is a timeout scheduled */
   if (manager->timeout_id > 0)
     {
-      g_mutex_unlock (manager->lock);
+      tumbler_mutex_unlock (manager->lock);
       return;
     }
 
@@ -181,7 +184,7 @@ tumbler_lifecycle_manager_start (TumblerLifecycleManager *manager)
                            (GSourceFunc) tumbler_lifecycle_manager_timeout, 
                            manager);
 
-  g_mutex_unlock (manager->lock);
+  tumbler_mutex_unlock (manager->lock);
 }
 
 
@@ -193,13 +196,13 @@ tumbler_lifecycle_manager_keep_alive (TumblerLifecycleManager *manager,
   g_return_val_if_fail (TUMBLER_IS_LIFECYCLE_MANAGER (manager), FALSE);
   g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
-  g_mutex_lock (manager->lock);
+  tumbler_mutex_lock (manager->lock);
 
   /* if the shutdown signal has been emitted, there's nothing 
    * we can do to prevent a shutdown anymore */
   if (manager->shutdown_emitted)
     {
-      g_mutex_unlock (manager->lock);
+      tumbler_mutex_unlock (manager->lock);
 
       if (error != NULL)
         {
@@ -220,7 +223,7 @@ tumbler_lifecycle_manager_keep_alive (TumblerLifecycleManager *manager,
                            (GSourceFunc) tumbler_lifecycle_manager_timeout, 
                            manager);
 
-  g_mutex_unlock (manager->lock);
+  tumbler_mutex_unlock (manager->lock);
 
   return TRUE;
 }
@@ -232,11 +235,11 @@ tumbler_lifecycle_manager_increment_use_count (TumblerLifecycleManager *manager)
 {
   g_return_if_fail (TUMBLER_IS_LIFECYCLE_MANAGER (manager));
 
-  g_mutex_lock (manager->lock);
+  tumbler_mutex_lock (manager->lock);
 
   manager->component_use_count += 1;
   
-  g_mutex_unlock (manager->lock);
+  tumbler_mutex_unlock (manager->lock);
 }
 
 
@@ -246,11 +249,11 @@ tumbler_lifecycle_manager_decrement_use_count (TumblerLifecycleManager *manager)
 {
   g_return_if_fail (TUMBLER_IS_LIFECYCLE_MANAGER (manager));
 
-  g_mutex_lock (manager->lock);
+  tumbler_mutex_lock (manager->lock);
   
   /* decrement the use count, make sure not to drop below zero */
   if (manager->component_use_count > 0)
     manager->component_use_count -= 1;
   
-  g_mutex_unlock (manager->lock);
+  tumbler_mutex_unlock (manager->lock);
 }
diff --git a/tumblerd/tumbler-lifo-scheduler.c b/tumblerd/tumbler-lifo-scheduler.c
index 8cc7e82..8445872 100644
--- a/tumblerd/tumbler-lifo-scheduler.c
+++ b/tumblerd/tumbler-lifo-scheduler.c
@@ -34,6 +34,7 @@
 
 #include <tumblerd/tumbler-lifo-scheduler.h>
 #include <tumblerd/tumbler-scheduler.h>
+#include <tumblerd/tumbler-utils.h>
 
 
 
@@ -89,7 +90,7 @@ struct _TumblerLifoScheduler
   GObject __parent__;
 
   GThreadPool *pool;
-  GMutex      *mutex;
+  TUMBLER_MUTEX (mutex);
   GList       *requests;
 
   gchar       *name;
@@ -135,7 +136,7 @@ tumbler_lifo_scheduler_iface_init (TumblerSchedulerIface *iface)
 static void
 tumbler_lifo_scheduler_init (TumblerLifoScheduler *scheduler)
 {
-  scheduler->mutex = g_mutex_new ();
+  tumbler_mutex_create (scheduler->mutex);
   scheduler->requests = NULL;
 
   /* allocate a thread pool with a maximum of one thread */
@@ -167,7 +168,7 @@ tumbler_lifo_scheduler_finalize (GObject *object)
   g_free (scheduler->name);
 
   /* destroy the mutex */
-  g_mutex_free (scheduler->mutex);
+  tumbler_mutex_free (scheduler->mutex);
 
   (*G_OBJECT_CLASS (tumbler_lifo_scheduler_parent_class)->finalize) (object);
 }
@@ -225,7 +226,7 @@ tumbler_lifo_scheduler_push (TumblerScheduler        *scheduler,
   g_return_if_fail (TUMBLER_IS_LIFO_SCHEDULER (scheduler));
   g_return_if_fail (request != NULL);
 
-  g_mutex_lock (lifo_scheduler->mutex);
+  tumbler_mutex_lock (lifo_scheduler->mutex);
   
   /* gain ownership over the requests (sets request->scheduler) */
   tumbler_scheduler_take_request (scheduler, request);
@@ -236,7 +237,7 @@ tumbler_lifo_scheduler_push (TumblerScheduler        *scheduler,
   /* enqueue the request in the pool */
   g_thread_pool_push (lifo_scheduler->pool, request, NULL);
 
-  g_mutex_unlock (lifo_scheduler->mutex);
+  tumbler_mutex_unlock (lifo_scheduler->mutex);
 }
 
 
@@ -250,14 +251,14 @@ tumbler_lifo_scheduler_dequeue (TumblerScheduler *scheduler,
   g_return_if_fail (TUMBLER_IS_LIFO_SCHEDULER (scheduler));
   g_return_if_fail (handle != 0);
 
-  g_mutex_lock (lifo_scheduler->mutex);
+  tumbler_mutex_lock (lifo_scheduler->mutex);
 
   /* dequeue all requests (usually only one) with this handle */
   g_list_foreach (lifo_scheduler->requests, 
                   (GFunc) tumbler_lifo_scheduler_dequeue_request, 
                   GUINT_TO_POINTER (handle));
 
-  g_mutex_unlock (lifo_scheduler->mutex);
+  tumbler_mutex_unlock (lifo_scheduler->mutex);
 }
 
 
@@ -279,7 +280,7 @@ tumbler_lifo_scheduler_cancel_by_mount (TumblerScheduler *scheduler,
   /* determine the root mount point */
   mount_point = g_mount_get_root (mount);
 
-  g_mutex_lock (lifo_scheduler->mutex);
+  tumbler_mutex_lock (lifo_scheduler->mutex);
 
   /* iterate over all requests */
   for (iter = lifo_scheduler->requests; iter != NULL; iter = iter->next)
@@ -301,7 +302,7 @@ tumbler_lifo_scheduler_cancel_by_mount (TumblerScheduler *scheduler,
         }
     }
 
-  g_mutex_unlock (lifo_scheduler->mutex);
+  tumbler_mutex_unlock (lifo_scheduler->mutex);
 
   /* release the mount point */
   g_object_unref (mount_point);
@@ -374,27 +375,27 @@ tumbler_lifo_scheduler_thread (gpointer data,
                          request->origin);
 
   /* finish the request if it was already dequeued */
-  g_mutex_lock (scheduler->mutex);
+  tumbler_mutex_lock (scheduler->mutex);
   if (request->dequeued)
     {
       tumbler_lifo_scheduler_finish_request (scheduler, request);
-      g_mutex_unlock (scheduler->mutex);
+      tumbler_mutex_unlock (scheduler->mutex);
       return;
     }
-  g_mutex_unlock (scheduler->mutex);
+  tumbler_mutex_unlock (scheduler->mutex);
 
   /* process URI by URI */
   for (n = 0; n < request->length; ++n)
     {
       /* finish the request if it was dequeued */
-      g_mutex_lock (scheduler->mutex);
+      tumbler_mutex_lock (scheduler->mutex);
       if (request->dequeued)
         {
           tumbler_lifo_scheduler_finish_request (scheduler, request);
-          g_mutex_unlock (scheduler->mutex);
+          tumbler_mutex_unlock (scheduler->mutex);
           return;
         }
-      g_mutex_unlock (scheduler->mutex);
+      tumbler_mutex_unlock (scheduler->mutex);
 
       /* ignore the the URI if has been cancelled already */
       if (g_cancellable_is_cancelled (request->cancellables[n]))
@@ -469,9 +470,9 @@ tumbler_lifo_scheduler_thread (gpointer data,
       /* finish the request if it was dequeued */
       if (request->dequeued)
         {
-          g_mutex_lock (scheduler->mutex);
+          tumbler_mutex_lock (scheduler->mutex);
           tumbler_lifo_scheduler_finish_request (scheduler, request);
-          g_mutex_unlock (scheduler->mutex);
+          tumbler_mutex_unlock (scheduler->mutex);
           return;
         }
 
@@ -503,12 +504,12 @@ tumbler_lifo_scheduler_thread (gpointer data,
   /* free list */
   g_list_free (missing_uris);
 
-  g_mutex_lock (scheduler->mutex);
+  tumbler_mutex_lock (scheduler->mutex);
 
   /* notify others that we're finished processing the request */
   tumbler_lifo_scheduler_finish_request (scheduler, request);
 
-  g_mutex_unlock (scheduler->mutex);
+  tumbler_mutex_unlock (scheduler->mutex);
 }
 
 
diff --git a/tumblerd/tumbler-manager.c b/tumblerd/tumbler-manager.c
index e8bf162..db5d64e 100644
--- a/tumblerd/tumbler-manager.c
+++ b/tumblerd/tumbler-manager.c
@@ -127,7 +127,7 @@ struct _TumblerManager
    * (smaller directory index) coming first */
   GHashTable      *thumbnailers;
 
-  GMutex          *mutex;
+  TUMBLER_MUTEX    (mutex);
 };
 
 struct _OverrideInfo
@@ -187,7 +187,7 @@ tumbler_manager_init (TumblerManager *manager)
 {
   manager->directories = NULL;
   manager->monitors = NULL;
-  manager->mutex = g_mutex_new ();
+  tumbler_mutex_create (manager->mutex);
 
   /* create the overrides info hash table */
   manager->overrides = g_hash_table_new_full (g_str_hash, g_str_equal,
@@ -224,7 +224,7 @@ tumbler_manager_finalize (GObject *object)
 {
   TumblerManager *manager = TUMBLER_MANAGER (object);
 
-  g_mutex_lock (manager->mutex);
+  tumbler_mutex_lock (manager->mutex);
 
   /* release all thumbnailer directory monitors */
   g_list_foreach (manager->monitors, (GFunc) tumbler_manager_monitor_unref, manager);
@@ -244,10 +244,10 @@ tumbler_manager_finalize (GObject *object)
   /* release the D-Bus connection object */
   dbus_g_connection_unref (manager->connection);
 
-  g_mutex_unlock (manager->mutex);
+  tumbler_mutex_unlock (manager->mutex);
 
   /* destroy the mutex */
-  g_mutex_free (manager->mutex);
+  tumbler_mutex_free (manager->mutex);
 
   (*G_OBJECT_CLASS (tumbler_manager_parent_class)->finalize) (object);
 }
@@ -1188,13 +1188,13 @@ tumbler_manager_load (TumblerManager *manager)
 
   g_return_if_fail (TUMBLER_MANAGER (manager));
 
-  g_mutex_lock (manager->mutex);
+  tumbler_mutex_lock (manager->mutex);
 
   /* this function may only be called once */
   g_assert (manager->directories == NULL);
   g_assert (manager->monitors == NULL);
 
-  g_mutex_unlock (manager->mutex);
+  tumbler_mutex_unlock (manager->mutex);
 
   /* prepend $XDG_DATA_HOME/thumbnailers/ to the directory list */
   dirname = g_build_filename (g_get_user_data_dir (), "thumbnailers", NULL);
@@ -1216,7 +1216,7 @@ tumbler_manager_load (TumblerManager *manager)
    * priority come first */
   directories = g_list_reverse (directories);
 
-  g_mutex_lock (manager->mutex);
+  tumbler_mutex_lock (manager->mutex);
 
   /* pass the ownership of the directories list to the manager */
   manager->directories = directories;
@@ -1246,7 +1246,7 @@ tumbler_manager_load (TumblerManager *manager)
       manager->monitors = g_list_prepend (manager->monitors, monitor);
     }
 
-  g_mutex_unlock (manager->mutex);
+  tumbler_mutex_unlock (manager->mutex);
 }
 
 
@@ -1561,46 +1561,46 @@ tumbler_manager_directory_changed (TumblerManager   *manager,
 #ifdef DEBUG
           g_debug ("  %s deleted", g_file_get_path (file));
 #endif
-          g_mutex_lock (manager->mutex);
+          tumbler_mutex_lock (manager->mutex);
           tumbler_manager_unload_overrides_file (manager, file);
           tumbler_registry_update_supported (manager->registry);
 #ifdef DEBUG
           dump_overrides (manager);
 #endif
-          g_mutex_unlock (manager->mutex);
+          tumbler_mutex_unlock (manager->mutex);
         }
       else if (g_str_has_suffix (base_name, ".service"))
         {
 #ifdef DEBUG
           g_debug ("  %s deleted", g_file_get_path (file));
 #endif
-          g_mutex_lock (manager->mutex);
+          tumbler_mutex_lock (manager->mutex);
           tumbler_manager_thumbnailer_file_deleted (manager, file);
           tumbler_registry_update_supported (manager->registry);
 #ifdef DEBUG
           dump_thumbnailers (manager);
 #endif
-          g_mutex_unlock (manager->mutex);
+          tumbler_mutex_unlock (manager->mutex);
         }
       else
         {
 #ifdef DEBUG
           g_debug ("  %s deleted", g_file_get_path (file));
 #endif
-          g_mutex_lock (manager->mutex);
+          tumbler_mutex_lock (manager->mutex);
           dir_index = tumbler_manager_get_dir_index (manager, file);
-          g_mutex_unlock (manager->mutex);
+          tumbler_mutex_unlock (manager->mutex);
 
           if (dir_index >= 0)
             {
-              g_mutex_lock (manager->mutex);
+              tumbler_mutex_lock (manager->mutex);
               tumbler_manager_directory_deleted (manager, file, dir_index);
               tumbler_registry_update_supported (manager->registry);
 #ifdef DEBUG
               dump_overrides (manager);
               dump_thumbnailers (manager);
 #endif
-              g_mutex_unlock (manager->mutex);
+              tumbler_mutex_unlock (manager->mutex);
             }
         }
     }
@@ -1619,27 +1619,27 @@ tumbler_manager_directory_changed (TumblerManager   *manager,
 #ifdef DEBUG
                   g_debug ("  %s created", g_file_get_path (file));
 #endif
-                  g_mutex_lock (manager->mutex);
+                  tumbler_mutex_lock (manager->mutex);
                   tumbler_manager_load_overrides_file (manager, file);
                   tumbler_registry_update_supported (manager->registry);
 #ifdef DEBUG
                   dump_overrides (manager);
 #endif
-                  g_mutex_unlock (manager->mutex);
+                  tumbler_mutex_unlock (manager->mutex);
                 }
               else if (event_type == G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT)
                 {
 #ifdef DEBUG
                   g_debug ("  %s changed", g_file_get_path (file));
 #endif
-                  g_mutex_lock (manager->mutex);
+                  tumbler_mutex_lock (manager->mutex);
                   tumbler_manager_unload_overrides_file (manager, file);
                   tumbler_manager_load_overrides_file (manager, file);
                   tumbler_registry_update_supported (manager->registry);
 #ifdef DEBUG
                   dump_overrides (manager);
 #endif
-                  g_mutex_unlock (manager->mutex);
+                  tumbler_mutex_unlock (manager->mutex);
                 }
             }
           else if (g_str_has_suffix (base_name, ".service"))
@@ -1649,35 +1649,35 @@ tumbler_manager_directory_changed (TumblerManager   *manager,
 #ifdef DEBUG
                   g_debug ("  %s created", g_file_get_path (file));
 #endif
-                  g_mutex_lock (manager->mutex);
+                  tumbler_mutex_lock (manager->mutex);
                   tumbler_manager_load_thumbnailer (manager, file);
                   tumbler_registry_update_supported (manager->registry);
 #ifdef DEBUG
                   dump_thumbnailers (manager);
 #endif
-                  g_mutex_unlock (manager->mutex);
+                  tumbler_mutex_unlock (manager->mutex);
                 }
               else if (event_type == G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT)
                 {
 #ifdef DEBUG
                   g_debug ("  %s changed", g_file_get_path (file));
 #endif
-                  g_mutex_lock (manager->mutex);
+                  tumbler_mutex_lock (manager->mutex);
                   tumbler_manager_thumbnailer_file_deleted (manager, file);
                   tumbler_manager_load_thumbnailer (manager, file);
                   tumbler_registry_update_supported (manager->registry);
 #ifdef DEBUG
                   dump_thumbnailers (manager);
 #endif
-                  g_mutex_unlock (manager->mutex);
+                  tumbler_mutex_unlock (manager->mutex);
                 }
             }
         }
       else
         {
-          g_mutex_lock (manager->mutex);
+          tumbler_mutex_lock (manager->mutex);
           dir_index = tumbler_manager_get_dir_index (manager, file);
-          g_mutex_unlock (manager->mutex);
+          tumbler_mutex_unlock (manager->mutex);
 
           if (dir_index >= 0)
             {
@@ -1685,14 +1685,14 @@ tumbler_manager_directory_changed (TumblerManager   *manager,
               g_debug ("  %s created", g_file_get_path (file));
 #endif
 
-              g_mutex_lock (manager->mutex);
+              tumbler_mutex_lock (manager->mutex);
               tumbler_manager_directory_created (manager, file, dir_index);
               tumbler_registry_update_supported (manager->registry);
 #ifdef DEBUG
               dump_overrides (manager);
               dump_thumbnailers (manager);
 #endif
-              g_mutex_unlock (manager->mutex);
+              tumbler_mutex_unlock (manager->mutex);
             }
         }
     }
@@ -1850,7 +1850,7 @@ tumbler_manager_start (TumblerManager *manager,
   g_return_val_if_fail (TUMBLER_IS_MANAGER (manager), FALSE);
   g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
-  g_mutex_lock (manager->mutex);
+  tumbler_mutex_lock (manager->mutex);
 
   /* get the native D-Bus connection */
   connection = dbus_g_connection_get_connection (manager->connection);
@@ -1868,13 +1868,13 @@ tumbler_manager_start (TumblerManager *manager,
                        _("Another thumbnailer manager is already running"));
         }
 
-      g_mutex_unlock (manager->mutex);
+      tumbler_mutex_unlock (manager->mutex);
 
       /* i can't work like this! */
       return FALSE;
     }
 
-  g_mutex_unlock (manager->mutex);
+  tumbler_mutex_unlock (manager->mutex);
 
   /* load thumbnailers installed into the system permanently */
   tumbler_manager_load (manager);
@@ -1900,7 +1900,7 @@ tumbler_manager_register (TumblerManager        *manager,
 
   sender_name = dbus_g_method_get_sender (context);
 
-  g_mutex_lock (manager->mutex);
+  tumbler_mutex_lock (manager->mutex);
 
   thumbnailer = tumbler_specialized_thumbnailer_new_foreign (manager->connection,
                                                              sender_name, uri_schemes, 
@@ -1910,7 +1910,7 @@ tumbler_manager_register (TumblerManager        *manager,
 
   g_object_unref (thumbnailer);
 
-  g_mutex_unlock (manager->mutex);
+  tumbler_mutex_unlock (manager->mutex);
 
   g_free (sender_name);
 
diff --git a/tumblerd/tumbler-registry.c b/tumblerd/tumbler-registry.c
index 4171b75..37c0e67 100644
--- a/tumblerd/tumbler-registry.c
+++ b/tumblerd/tumbler-registry.c
@@ -29,6 +29,7 @@
 
 #include <tumblerd/tumbler-registry.h>
 #include <tumblerd/tumbler-specialized-thumbnailer.h>
+#include <tumblerd/tumbler-utils.h>
 
 
 
@@ -56,7 +57,7 @@ struct _TumblerRegistry
 
   GHashTable   *thumbnailers;
   GHashTable   *preferred_thumbnailers;
-  GMutex       *mutex;
+  TUMBLER_MUTEX (mutex);
 
   gchar       **uri_schemes;
   gchar       **mime_types;
@@ -90,7 +91,7 @@ tumbler_registry_class_init (TumblerRegistryClass *klass)
 static void
 tumbler_registry_init (TumblerRegistry *registry)
 {
-  registry->mutex = g_mutex_new ();
+  tumbler_mutex_create (registry->mutex);
   registry->thumbnailers = g_hash_table_new_full (g_str_hash, g_str_equal,
                                                   g_free, tumbler_registry_list_free);
   registry->preferred_thumbnailers = g_hash_table_new_full (g_str_hash, g_str_equal,
@@ -113,7 +114,7 @@ tumbler_registry_finalize (GObject *object)
   g_strfreev (registry->mime_types);
 
   /* destroy the mutex */
-  g_mutex_free (registry->mutex);
+  tumbler_mutex_free (registry->mutex);
 
   (*G_OBJECT_CLASS (tumbler_registry_parent_class)->finalize) (object);
 }
@@ -348,7 +349,7 @@ tumbler_registry_add (TumblerRegistry    *registry,
   g_return_if_fail (TUMBLER_IS_REGISTRY (registry));
   g_return_if_fail (TUMBLER_IS_THUMBNAILER (thumbnailer));
 
-  g_mutex_lock (registry->mutex);
+  tumbler_mutex_lock (registry->mutex);
 
   /* determine the hash keys (all combinations of URI schemes and MIME types)
    * for this thumbnailer */
@@ -390,7 +391,7 @@ tumbler_registry_add (TumblerRegistry    *registry,
   dump_registry (registry);
 #endif
 
-  g_mutex_unlock (registry->mutex);
+  tumbler_mutex_unlock (registry->mutex);
 }
 
 
@@ -402,7 +403,7 @@ tumbler_registry_remove (TumblerRegistry    *registry,
   g_return_if_fail (TUMBLER_IS_REGISTRY (registry));
   g_return_if_fail (TUMBLER_IS_THUMBNAILER (thumbnailer));
 
-  g_mutex_lock (registry->mutex);
+  tumbler_mutex_lock (registry->mutex);
 
   g_signal_handlers_disconnect_matched (thumbnailer, G_SIGNAL_MATCH_DATA, 
                                         0, 0, NULL, NULL, registry);
@@ -411,7 +412,7 @@ tumbler_registry_remove (TumblerRegistry    *registry,
   g_hash_table_foreach (registry->thumbnailers, 
                         (GHFunc) tumbler_registry_remove_thumbnailer, thumbnailer);
 
-  g_mutex_unlock (registry->mutex);
+  tumbler_mutex_unlock (registry->mutex);
 }
 
 
@@ -423,11 +424,11 @@ tumbler_registry_get_thumbnailers (TumblerRegistry *registry)
 
   g_return_val_if_fail (TUMBLER_IS_REGISTRY (registry), NULL);
 
-  g_mutex_lock (registry->mutex);
+  tumbler_mutex_lock (registry->mutex);
 
   thumbnailers = tumbler_registry_get_thumbnailers_internal (registry);
 
-  g_mutex_unlock (registry->mutex);
+  tumbler_mutex_unlock (registry->mutex);
 
   /* return all active thumbnailers */
   return thumbnailers;
@@ -456,7 +457,7 @@ tumbler_registry_get_thumbnailer_array (TumblerRegistry    *registry,
   /* iterate over all URIs */
   for (n = 0; n < length; ++n)
     {
-      g_mutex_lock (registry->mutex);
+      tumbler_mutex_lock (registry->mutex);
 
       /* determine the URI scheme and generate a hash key */
       scheme = g_uri_parse_scheme (tumbler_file_info_get_uri (infos[n]));
@@ -470,7 +471,7 @@ tumbler_registry_get_thumbnailer_array (TumblerRegistry    *registry,
       g_free (hash_key);
       g_free (scheme);
 
-      g_mutex_unlock (registry->mutex);
+      tumbler_mutex_unlock (registry->mutex);
     }
 
   /* NULL-terminate the array */
@@ -506,7 +507,7 @@ tumbler_registry_update_supported (TumblerRegistry *registry)
 
   g_return_if_fail (TUMBLER_IS_REGISTRY (registry));
 
-  g_mutex_lock (registry->mutex);
+  tumbler_mutex_lock (registry->mutex);
 
   /* free the old cache */
   g_strfreev (registry->uri_schemes);
@@ -517,7 +518,7 @@ tumbler_registry_update_supported (TumblerRegistry *registry)
   /* get a list of all active thumbnailers */
   thumbnailers = tumbler_registry_get_thumbnailers_internal (registry);
 
-  g_mutex_unlock (registry->mutex);
+  tumbler_mutex_unlock (registry->mutex);
 
   /* abort if there are no thumbnailers */
   if (thumbnailers == NULL)
@@ -595,7 +596,7 @@ tumbler_registry_update_supported (TumblerRegistry *registry)
 
   n = g_hash_table_size (unique_pairs);
 
-  g_mutex_lock (registry->mutex);
+  tumbler_mutex_lock (registry->mutex);
 
   /* allocate a string array for the URI scheme / MIME type pairs */
   registry->uri_schemes = g_new0 (gchar *, n+1);
@@ -617,7 +618,7 @@ tumbler_registry_update_supported (TumblerRegistry *registry)
   registry->uri_schemes[n] = NULL;
   registry->mime_types[n] = NULL;
 
-  g_mutex_unlock (registry->mutex);
+  tumbler_mutex_unlock (registry->mutex);
 
   /* destroy the hash table we used */
   g_hash_table_unref (unique_pairs);
@@ -636,7 +637,7 @@ tumbler_registry_get_supported (TumblerRegistry     *registry,
 {
   g_return_if_fail (TUMBLER_IS_REGISTRY (registry));
 
-  g_mutex_lock (registry->mutex);
+  tumbler_mutex_lock (registry->mutex);
   
   if (uri_schemes != NULL)
     *uri_schemes = (const gchar *const *)registry->uri_schemes;
@@ -644,7 +645,7 @@ tumbler_registry_get_supported (TumblerRegistry     *registry,
   if (mime_types != NULL)
     *mime_types = (const gchar *const *)registry->mime_types;
 
-  g_mutex_unlock (registry->mutex);
+  tumbler_mutex_unlock (registry->mutex);
 }
 
 
@@ -658,9 +659,9 @@ tumbler_registry_get_preferred (TumblerRegistry *registry,
   g_return_val_if_fail (TUMBLER_IS_REGISTRY (registry), NULL);
   g_return_val_if_fail (hash_key != NULL && *hash_key != '\0', NULL);
 
-  g_mutex_lock (registry->mutex);
+  tumbler_mutex_lock (registry->mutex);
   thumbnailer = g_hash_table_lookup (registry->preferred_thumbnailers, hash_key);
-  g_mutex_unlock (registry->mutex);
+  tumbler_mutex_unlock (registry->mutex);
 
   return thumbnailer != NULL ? g_object_ref (thumbnailer) : NULL;
 }
@@ -676,7 +677,7 @@ tumbler_registry_set_preferred (TumblerRegistry    *registry,
   g_return_if_fail (hash_key != NULL && *hash_key != '\0');
   g_return_if_fail (thumbnailer == NULL || TUMBLER_IS_THUMBNAILER (thumbnailer));
 
-  g_mutex_lock (registry->mutex);
+  tumbler_mutex_lock (registry->mutex);
   
   if (thumbnailer == NULL)
     {
@@ -692,5 +693,5 @@ tumbler_registry_set_preferred (TumblerRegistry    *registry,
   dump_registry (registry);
 #endif
 
-  g_mutex_unlock (registry->mutex);
+  tumbler_mutex_unlock (registry->mutex);
 }
diff --git a/tumblerd/tumbler-service.c b/tumblerd/tumbler-service.c
index 3039df9..d46a2db 100644
--- a/tumblerd/tumbler-service.c
+++ b/tumblerd/tumbler-service.c
@@ -122,7 +122,7 @@ struct _TumblerService
 
   DBusGConnection  *connection;
   TumblerRegistry  *registry;
-  GMutex           *mutex;
+  TUMBLER_MUTEX     (mutex);
   GList            *schedulers;
 
   GVolumeMonitor   *volume_monitor;
@@ -232,7 +232,7 @@ tumbler_service_class_init (TumblerServiceClass *klass)
 static void
 tumbler_service_init (TumblerService *service)
 {
-  service->mutex = g_mutex_new ();
+  tumbler_mutex_create (service->mutex);
   service->schedulers = NULL;
 
   service->volume_monitor = g_volume_monitor_get ();
@@ -329,7 +329,7 @@ tumbler_service_finalize (GObject *object)
 
   dbus_g_connection_unref (service->connection);
 
-  g_mutex_free (service->mutex);
+  tumbler_mutex_free (service->mutex);
 
   (*G_OBJECT_CLASS (tumbler_service_parent_class)->finalize) (object);
 }
@@ -687,13 +687,13 @@ tumbler_service_pre_unmount (TumblerService *service,
   g_return_if_fail (G_IS_MOUNT (mount));
   g_return_if_fail (volume_monitor == service->volume_monitor);
 
-  g_mutex_lock (service->mutex);
+  tumbler_mutex_lock (service->mutex);
 
   /* iterate over all schedulers, cancelling URIs belonging to the mount */
   for (iter = service->schedulers; iter != NULL; iter = iter->next)
     tumbler_scheduler_cancel_by_mount (iter->data, mount);
 
-  g_mutex_unlock (service->mutex);
+  tumbler_mutex_unlock (service->mutex);
 }
 
 
@@ -740,7 +740,7 @@ tumbler_service_start (TumblerService *service,
   g_return_val_if_fail (TUMBLER_IS_SERVICE (service), FALSE);
   g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
-  g_mutex_lock (service->mutex);
+  tumbler_mutex_lock (service->mutex);
 
   /* get the native D-Bus connection */
   connection = dbus_g_connection_get_connection (service->connection);
@@ -758,12 +758,12 @@ tumbler_service_start (TumblerService *service,
                        _("Another generic thumbnailer is already running"));
         }
 
-      g_mutex_unlock (service->mutex);
+      tumbler_mutex_unlock (service->mutex);
 
       return FALSE;
     }
 
-  g_mutex_unlock (service->mutex);
+  tumbler_mutex_unlock (service->mutex);
 
   return TRUE;
 }
@@ -795,7 +795,7 @@ tumbler_service_queue (TumblerService        *service,
   dbus_async_return_if_fail (uris != NULL, context);
   dbus_async_return_if_fail (mime_hints != NULL, context);
 
-  g_mutex_lock (service->mutex);
+  tumbler_mutex_lock (service->mutex);
 
   /* prevent the lifecycle manager to shut down the service as long
    * as the request is still being processed */
@@ -884,7 +884,7 @@ tumbler_service_queue (TumblerService        *service,
   /* free the thumbnailer array */
   tumbler_thumbnailer_array_free (thumbnailers, length);
 
-  g_mutex_unlock (service->mutex);
+  tumbler_mutex_unlock (service->mutex);
 
   dbus_g_method_return (context, handle);
 
@@ -903,7 +903,7 @@ tumbler_service_dequeue (TumblerService        *service,
 
   dbus_async_return_if_fail (TUMBLER_IS_SERVICE (service), context);
 
-  g_mutex_lock (service->mutex);
+  tumbler_mutex_lock (service->mutex);
 
   if (handle != 0) 
     {
@@ -916,7 +916,7 @@ tumbler_service_dequeue (TumblerService        *service,
         }
     }
 
-  g_mutex_unlock (service->mutex);
+  tumbler_mutex_unlock (service->mutex);
 
   dbus_g_method_return (context);
 
@@ -935,12 +935,12 @@ tumbler_service_get_supported (TumblerService        *service,
 
   dbus_async_return_if_fail (TUMBLER_IS_SERVICE (service), context);
 
-  g_mutex_lock (service->mutex);
+  tumbler_mutex_lock (service->mutex);
 
   /* fetch all supported URI scheme / MIME type pairs from the registry */
   tumbler_registry_get_supported (service->registry, &uri_schemes, &mime_types);
 
-  g_mutex_unlock (service->mutex);
+  tumbler_mutex_unlock (service->mutex);
 
   /* return the arrays to the caller */
   dbus_g_method_return (context, uri_schemes, mime_types);
@@ -1006,7 +1006,7 @@ tumbler_service_get_schedulers (TumblerService        *service,
 
   dbus_async_return_if_fail (TUMBLER_IS_SERVICE (service), context);
 
-  g_mutex_lock (service->mutex);
+  tumbler_mutex_lock (service->mutex);
 
   /* allocate an error for the schedulers */
   supported_schedulers = g_new0 (gchar *, g_list_length (service->schedulers) + 2);
@@ -1021,7 +1021,7 @@ tumbler_service_get_schedulers (TumblerService        *service,
         tumbler_scheduler_get_name (TUMBLER_SCHEDULER (iter->data));
     }
 
-  g_mutex_unlock (service->mutex);
+  tumbler_mutex_unlock (service->mutex);
 
   /* NULL-terminate the array */
   supported_schedulers[n] = NULL;
diff --git a/tumblerd/tumbler-specialized-thumbnailer.c b/tumblerd/tumbler-specialized-thumbnailer.c
index ec6d80f..955a021 100644
--- a/tumblerd/tumbler-specialized-thumbnailer.c
+++ b/tumblerd/tumbler-specialized-thumbnailer.c
@@ -30,6 +30,7 @@
 #include <tumbler/tumbler-marshal.h>
 
 #include <tumblerd/tumbler-specialized-thumbnailer.h>
+#include <tumblerd/tumbler-utils.h>
 
 
 
@@ -92,8 +93,12 @@ struct _TumblerSpecializedThumbnailer
 struct _SpecializedInfo
 {
   TumblerThumbnailer *thumbnailer;
+#if GLIB_CHECK_VERSION (2, 32, 0)
+  GCond               condition;
+#else
   GCond              *condition;
-  GMutex             *mutex;
+#endif
+  TUMBLER_MUTEX       (mutex);
   const gchar        *uri;
   const gchar        *mime_type;
   gboolean            had_callback;
@@ -378,10 +383,14 @@ specialized_finished (DBusGProxy *proxy,
 
   if (info->handle == handle) 
     {
-      g_mutex_lock (info->mutex);
+      tumbler_mutex_lock (info->mutex);
+#if GLIB_CHECK_VERSION (2, 32, 0)
+      g_cond_broadcast (&info->condition);
+#else
       g_cond_broadcast (info->condition);
+#endif
       info->had_callback = TRUE;
-      g_mutex_unlock (info->mutex);
+      tumbler_mutex_unlock (info->mutex);
     }
 }
 
@@ -392,7 +401,11 @@ tumbler_specialized_thumbnailer_create (TumblerThumbnailer *thumbnailer,
 {
   TumblerSpecializedThumbnailer *s;
   SpecializedInfo                sinfo;
+#if GLIB_CHECK_VERSION (2, 32, 0)
+  gint64                         end_time;
+#else
   GTimeVal                       timev;
+#endif
   TumblerThumbnail              *thumbnail;
   TumblerThumbnailFlavor        *flavor;
   const gchar                   *flavor_name;
@@ -409,9 +422,13 @@ tumbler_specialized_thumbnailer_create (TumblerThumbnailer *thumbnailer,
 
   s = TUMBLER_SPECIALIZED_THUMBNAILER (thumbnailer);
 
+#if GLIB_CHECK_VERSION (2, 32, 0)
+  g_cond_init (&sinfo.condition);
+#else
   sinfo.condition = g_cond_new ();
+#endif
   sinfo.had_callback = FALSE;
-  sinfo.mutex = g_mutex_new ();
+  tumbler_mutex_create (sinfo.mutex);
   sinfo.uri = uri;
   sinfo.mime_type = tumbler_file_info_get_mime_type (info);
   sinfo.thumbnailer = thumbnailer;
@@ -445,25 +462,32 @@ tumbler_specialized_thumbnailer_create (TumblerThumbnailer *thumbnailer,
 
   if (error == NULL)
     {
+     /* 100 seconds worth of timeout */
+#if GLIB_CHECK_VERSION (2, 32, 0)
+     end_time = g_get_monotonic_time () + 100 * G_TIME_SPAN_SECOND;
+#else
       g_get_current_time (&timev);
-  
-      /* 100 seconds worth of timeout */
       g_time_val_add  (&timev, 100000000); 
+#endif
 
-      g_mutex_lock (sinfo.mutex);
+      tumbler_mutex_lock (sinfo.mutex);
 
       /* we are a thread, so the mainloop will still be
        * be running to receive the error and ready signals */
       if (!sinfo.had_callback)
         {
+#if GLIB_CHECK_VERSION (2, 32, 0)
+          if (!g_cond_wait_until (&sinfo.condition, &sinfo.mutex, end_time))
+#else
           if (!g_cond_timed_wait (sinfo.condition, sinfo.mutex, &timev))
+#endif
             {
               message = g_strdup (_("Failed to call the specialized thumbnailer: timeout"));
               g_signal_emit_by_name (thumbnailer, "error", uri, 1, message);
               g_free (message);
             }
         }
-      g_mutex_unlock (sinfo.mutex);
+      tumbler_mutex_unlock (sinfo.mutex);
     }
   else
     {
@@ -485,6 +509,12 @@ tumbler_specialized_thumbnailer_create (TumblerThumbnailer *thumbnailer,
   dbus_g_proxy_disconnect_signal (s->proxy, "Error",
                                G_CALLBACK (specialized_error),
                                &sinfo);
+
+#if GLIB_CHECK_VERSION (2, 32, 0)
+  g_cond_clear (&sinfo.condition);
+#else
+  g_cond_free (sinfo.condition);
+#endif
 }
 
 static void
diff --git a/tumblerd/tumbler-utils.h b/tumblerd/tumbler-utils.h
index 9b0adfc..4553de9 100644
--- a/tumblerd/tumbler-utils.h
+++ b/tumblerd/tumbler-utils.h
@@ -41,6 +41,20 @@ G_BEGIN_DECLS
       }                                                                                 \
   }G_STMT_END
 
+#if GLIB_CHECK_VERSION (2, 32, 0)
+#define TUMBLER_MUTEX(mtx)        GMutex mtx
+#define tumbler_mutex_free(mtx)   G_STMT_START{ (void)0; }G_STMT_END
+#define tumbler_mutex_lock(mtx)   g_mutex_lock (&(mtx))
+#define tumbler_mutex_unlock(mtx) g_mutex_unlock (&(mtx))
+#define tumbler_mutex_create(mtx) g_mutex_init (&(mtx))
+#else
+#define TUMBLER_MUTEX(mtx)        GMutex *mtx
+#define tumbler_mutex_free(mtx)   g_mutex_free (mtx)
+#define tumbler_mutex_lock(mtx)   g_mutex_lock (mtx)
+#define tumbler_mutex_unlock(mtx) g_mutex_unlock (mtx)
+#define tumbler_mutex_create(mtx) (mtx) = g_mutex_new ()
+#endif
+
 G_END_DECLS
 
 #endif /* !__TUMBLER_UTILS_H__ */


More information about the Xfce4-commits mailing list