[maemo-commits] [maemo-commits] r15975 - projects/haf/branches/hildon-thumbnail/daemonize/daemon

From: subversion at stage.maemo.org subversion at stage.maemo.org
Date: Tue Sep 2 19:44:02 EEST 2008
Author: pvanhoof
Date: 2008-09-02 19:44:00 +0300 (Tue, 02 Sep 2008)
New Revision: 15975

Modified:
   projects/haf/branches/hildon-thumbnail/daemonize/daemon/manager.c
Log:
Making things a bit more thread safe

Modified: projects/haf/branches/hildon-thumbnail/daemonize/daemon/manager.c
===================================================================
--- projects/haf/branches/hildon-thumbnail/daemonize/daemon/manager.c	2008-09-02 16:23:05 UTC (rev 15974)
+++ projects/haf/branches/hildon-thumbnail/daemonize/daemon/manager.c	2008-09-02 16:44:00 UTC (rev 15975)
@@ -18,6 +18,7 @@
 typedef struct {
 	DBusGConnection *connection;
 	GHashTable *handlers;
+	GMutex *mutex;
 } ManagerPrivate;
 
 enum {
@@ -29,9 +30,14 @@
 manager_get_handler (Manager *object, const gchar *mime_type)
 {
 	ManagerPrivate *priv = MANAGER_GET_PRIVATE (object);
-	DBusGProxy *proxy = g_hash_table_lookup (priv->handlers, mime_type);
+	DBusGProxy *proxy;
+
+	g_mutex_lock (priv->mutex);
+	proxy = g_hash_table_lookup (priv->handlers, mime_type);
 	if (proxy)
 		g_object_ref (proxy);
+	g_mutex_unlock (priv->mutex);
+
 	return proxy;
 }
 
@@ -50,10 +56,13 @@
 {
 	ManagerPrivate *priv = MANAGER_GET_PRIVATE (object);
 
+	g_mutex_lock (priv->mutex);
+
 	g_hash_table_foreach_remove (priv->handlers, 
 				     do_remove_or_not,
 				     proxy);
 
+	g_mutex_unlock (priv->mutex);
 }
 
 void
@@ -65,6 +74,8 @@
 
 	dbus_async_return_if_fail (mime_type != NULL, context);
 
+	g_mutex_lock (priv->mutex);
+
 	sender = dbus_g_method_get_sender (context);
 
 	mime_proxy = dbus_g_proxy_new_for_name (priv->connection, sender, 
@@ -80,6 +91,8 @@
 	g_signal_connect (mime_proxy, "destroy",
 			  G_CALLBACK (service_gone),
 			  object);
+
+	g_mutex_unlock (priv->mutex);
 }
 
 static void
@@ -88,6 +101,7 @@
 	ManagerPrivate *priv = MANAGER_GET_PRIVATE (object);
 
 	g_hash_table_unref (priv->handlers);
+	g_mutex_free (priv->mutex);
 
 	G_OBJECT_CLASS (manager_parent_class)->finalize (object);
 }
@@ -160,7 +174,8 @@
 manager_init (Manager *object)
 {
 	ManagerPrivate *priv = MANAGER_GET_PRIVATE (object);
-	
+
+	priv->mutex = g_mutex_new ();
 	priv->handlers = g_hash_table_new_full (g_str_hash, g_str_equal,
 						(GDestroyNotify) g_free, 
 						(GDestroyNotify) g_object_unref);


More information about the maemo-commits mailing list