gvfs r1424 - in trunk: . client
- From: alexl svn gnome org
- To: svn-commits-list gnome org
- Subject: gvfs r1424 - in trunk: . client
- Date: Thu, 28 Feb 2008 15:28:22 +0000 (GMT)
Author: alexl
Date: Thu Feb 28 15:28:21 2008
New Revision: 1424
URL: http://svn.gnome.org/viewvc/gvfs?rev=1424&view=rev
Log:
2008-02-28 Alexander Larsson <alexl redhat com>
* client/gdaemonvolumemonitor.c:
(mount_added):
(mount_removed):
Emit signals outside of the lock to avoid
deadlocks (#519250)
Modified:
trunk/ChangeLog
trunk/client/gdaemonvolumemonitor.c
Modified: trunk/client/gdaemonvolumemonitor.c
==============================================================================
--- trunk/client/gdaemonvolumemonitor.c (original)
+++ trunk/client/gdaemonvolumemonitor.c Thu Feb 28 15:28:21 2008
@@ -148,7 +148,9 @@
if (mount)
{
g_warning (G_STRLOC ": Mount was added twice!");
- goto out;
+
+ G_UNLOCK (_the_daemon_volume_monitor);
+ return;
}
if (mount_info->user_visible)
@@ -158,11 +160,19 @@
if (volume != NULL)
g_daemon_mount_set_foreign_volume (mount, volume);
daemon_monitor->mounts = g_list_prepend (daemon_monitor->mounts, mount);
- g_signal_emit_by_name (daemon_monitor, "mount_added", mount);
- }
- out:
+ /* Ref for the signal emission, other ref is owned by volume monitor */
+ g_object_ref (mount);
+ }
+
G_UNLOCK (_the_daemon_volume_monitor);
+
+ if (mount)
+ {
+ /* Emit signal outside lock */
+ g_signal_emit_by_name (daemon_monitor, "mount_added", mount);
+ g_object_unref (mount);
+ }
}
static void
@@ -177,16 +187,19 @@
{
if (mount_info->user_visible)
g_warning (G_STRLOC ": An unknown mount was removed!");
- goto out;
+
+ G_UNLOCK (_the_daemon_volume_monitor);
+ return;
}
daemon_monitor->mounts = g_list_remove (daemon_monitor->mounts, mount);
+
+ G_UNLOCK (_the_daemon_volume_monitor);
+
g_signal_emit_by_name (daemon_monitor, "mount_removed", mount);
g_signal_emit_by_name (mount, "unmounted");
+
g_object_unref (mount);
-
- out:
- G_UNLOCK (_the_daemon_volume_monitor);
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]