[gvfs/gnome-3-16] network: Fix crashes when mount failed
- From: Ondrej Holy <oholy src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gvfs/gnome-3-16] network: Fix crashes when mount failed
- Date: Thu, 18 Feb 2016 13:20:40 +0000 (UTC)
commit fdfa790f7435332fa7942a209d436e4b854909c1
Author: Ondrej Holy <oholy redhat com>
Date: Wed Jan 27 09:07:02 2016 +0100
network: Fix crashes when mount failed
Mount operation might fail if you run multiple mount operations concurrently.
Backend memory is released consequently. Unfortunatelly some idle sources
and signal handlers are not removed, which might cause segmentation faults.
This patch fixes this and also some other memory leaks.
https://bugzilla.gnome.org/show_bug.cgi?id=712235
daemon/gvfsbackendnetwork.c | 26 ++++++++++++++++++++++++--
1 files changed, 24 insertions(+), 2 deletions(-)
---
diff --git a/daemon/gvfsbackendnetwork.c b/daemon/gvfsbackendnetwork.c
index bdb9cb9..4403277 100644
--- a/daemon/gvfsbackendnetwork.c
+++ b/daemon/gvfsbackendnetwork.c
@@ -299,7 +299,7 @@ update_from_files (GVfsBackendNetwork *backend,
}
}
- g_list_foreach (old_files, (GFunc)network_file_free, NULL);
+ g_list_free_full (old_files, (GDestroyNotify)network_file_free);
}
static void
@@ -652,7 +652,7 @@ smb_settings_change_event_cb (GSettings *settings,
{
g_signal_handlers_disconnect_by_func (backend->smb_monitor,
notify_smb_files_changed,
- backend->smb_monitor);
+ backend);
g_file_monitor_cancel (backend->smb_monitor);
g_object_unref (backend->smb_monitor);
backend->smb_monitor = NULL;
@@ -948,6 +948,28 @@ g_vfs_backend_network_finalize (GObject *object)
g_object_unref (backend->smb_settings);
if (backend->dnssd_settings)
g_object_unref (backend->dnssd_settings);
+ if (backend->dnssd_monitor)
+ {
+ g_signal_handlers_disconnect_by_func (backend->dnssd_monitor, notify_dnssd_local_changed, backend);
+ g_clear_object (&backend->dnssd_monitor);
+ }
+ if (backend->smb_monitor)
+ {
+ g_signal_handlers_disconnect_by_func (backend->smb_monitor, notify_smb_files_changed, backend);
+ g_clear_object (&backend->smb_monitor);
+ }
+ if (backend->idle_tag)
+ {
+ g_source_remove (backend->idle_tag);
+ backend->idle_tag = 0;
+ }
+ if (backend->files)
+ {
+ g_list_free_full (backend->files, (GDestroyNotify)network_file_free);
+ backend->files = NULL;
+ }
+ g_free (backend->current_workgroup);
+ g_free (backend->extra_domains);
if (G_OBJECT_CLASS (g_vfs_backend_network_parent_class)->finalize)
(*G_OBJECT_CLASS (g_vfs_backend_network_parent_class)->finalize) (object);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]