Commit 73477419 authored by Alexander Larsson's avatar Alexander Larsson Committed by Alexander Larsson

Bug 573970 – crash in gunixvolumemonitor:update_mounts when unmounting

2009-03-04  Alexander Larsson  <alexl@redhat.com>

	Bug 573970 – crash in gunixvolumemonitor:update_mounts when unmounting

        * gunionvolumemonitor.c:
        (g_union_volume_monitor_dispose):
	Run dispose on child monitors when disposing.

        * gunixvolumemonitor.c:
	Remove all volumes and mount on dispose to avoid circular
	dependencies not freeing the monitor



svn path=/trunk/; revision=7957
parent 011901da
2009-03-04 Alexander Larsson <alexl@redhat.com>
Bug 573970 – crash in gunixvolumemonitor:update_mounts when unmounting
* gunionvolumemonitor.c:
(g_union_volume_monitor_dispose):
Run dispose on child monitors when disposing.
* gunixvolumemonitor.c:
Remove all volumes and mount on dispose to avoid circular
dependencies not freeing the monitor
2009-03-03 Alexander Larsson <alexl@redhat.com>
Bug 561172 – gnome-open fails on local URIs with anchors
......
......@@ -80,11 +80,20 @@ static void
g_union_volume_monitor_dispose (GObject *object)
{
GUnionVolumeMonitor *monitor;
GVolumeMonitor *child_monitor;
GList *l;
monitor = G_UNION_VOLUME_MONITOR (object);
g_static_rec_mutex_lock (&the_volume_monitor_mutex);
the_volume_monitor = NULL;
for (l = monitor->monitors; l != NULL; l = l->next)
{
child_monitor = l->data;
g_object_run_dispose (G_OBJECT (child_monitor));
}
g_static_rec_mutex_unlock (&the_volume_monitor_mutex);
G_OBJECT_CLASS (g_union_volume_monitor_parent_class)->dispose (object);
......
......@@ -90,6 +90,23 @@ g_unix_volume_monitor_finalize (GObject *object)
G_OBJECT_CLASS (g_unix_volume_monitor_parent_class)->finalize (object);
}
static void
g_unix_volume_monitor_dispose (GObject *object)
{
GUnixVolumeMonitor *monitor;
monitor = G_UNIX_VOLUME_MONITOR (object);
g_list_foreach (monitor->volumes, (GFunc)g_object_unref, NULL);
g_list_free (monitor->volumes);
monitor->volumes = NULL;
g_list_foreach (monitor->mounts, (GFunc)g_object_unref, NULL);
g_list_free (monitor->mounts);
monitor->mounts = NULL;
G_OBJECT_CLASS (g_unix_volume_monitor_parent_class)->dispose (object);
}
static GList *
get_mounts (GVolumeMonitor *volume_monitor)
{
......@@ -170,6 +187,7 @@ g_unix_volume_monitor_class_init (GUnixVolumeMonitorClass *klass)
GNativeVolumeMonitorClass *native_class = G_NATIVE_VOLUME_MONITOR_CLASS (klass);
gobject_class->finalize = g_unix_volume_monitor_finalize;
gobject_class->dispose = g_unix_volume_monitor_dispose;
monitor_class->get_mounts = get_mounts;
monitor_class->get_volumes = get_volumes;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment