- Update to 1.2.3

- Prevent deadlocks in dnssd resolver (#497631)
This commit is contained in:
Tomas Bzatek 2009-05-18 13:51:32 +00:00
parent 0d1a224446
commit e9cad0520e
9 changed files with 58 additions and 223 deletions

View File

@ -1 +1 @@
gvfs-1.2.2.tar.bz2
gvfs-1.2.3.tar.bz2

View File

@ -42,9 +42,9 @@ Index: Makefile.am
SUBDIRS = \
common \
client \
@@ -15,6 +30,8 @@
EXTRA_DIST = \
@@ -18,6 +33,8 @@ EXTRA_DIST = \
gvfs.doap \
README.commits \
MAINTAINERS \
+ mount-archive.desktop.in.in \
+ $(desktop_in_files) \

View File

@ -0,0 +1,44 @@
From c89b238b4a03e08ca8c793c5689948b1fa9c2722 Mon Sep 17 00:00:00 2001
From: Tomas Bzatek <tbzatek@redhat.com>
Date: Fri, 15 May 2009 14:29:28 +0200
Subject: [PATCH] Avoid deadlock when pulling resolved record from cache
When the host has already been resolved and is present in the cache,
it's returned immediately. But we always started the mainloop even
if it was quit before, resulting in endless waiting for an event
which had been received before that.
---
common/gvfsdnssdresolver.c | 11 +++++++++--
1 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/common/gvfsdnssdresolver.c b/common/gvfsdnssdresolver.c
index 7794042..957d2cb 100644
--- a/common/gvfsdnssdresolver.c
+++ b/common/gvfsdnssdresolver.c
@@ -1249,14 +1249,21 @@ g_vfs_dns_sd_resolver_resolve_sync (GVfsDnsSdResolver *resolver,
g_return_val_if_fail (G_VFS_IS_DNS_SD_RESOLVER (resolver), FALSE);
data = g_new0 (ResolveDataSync, 1);
- data->loop = g_main_loop_new (NULL, FALSE);
+ /* mark the main loop as running to have an indication whether
+ * g_main_loop_quit() was called before g_main_loop_run()
+ */
+ data->loop = g_main_loop_new (NULL, TRUE);
g_vfs_dns_sd_resolver_resolve (resolver,
cancellable,
(GAsyncReadyCallback) resolve_sync_cb,
data);
- g_main_loop_run (data->loop);
+ /* start the loop only if it wasn't quit before
+ * (i.e. in case when pulling the record from cache)
+ */
+ if (g_main_loop_is_running (data->loop))
+ g_main_loop_run (data->loop);
ret = data->ret;
if (data->error != NULL)
--
1.6.2.2

View File

@ -1,117 +0,0 @@
Index: daemon/gvfsbackendsftp.c
===================================================================
--- daemon/gvfsbackendsftp.c (revision 2371)
+++ daemon/gvfsbackendsftp.c (working copy)
@@ -333,6 +333,84 @@ look_for_stderr_errors (GVfsBackend *bac
}
}
+static gchar*
+read_dbus_string_dict_value (DBusMessageIter *args, const gchar *key)
+{
+ DBusMessageIter items, entry;
+ gchar *str, *sig;
+
+ sig = dbus_message_iter_get_signature (args);
+ if (!sig || strcmp (sig, "a{ss}") != 0)
+ return NULL;
+
+ dbus_message_iter_recurse (args, &items);
+
+ if (dbus_message_iter_has_next (&items))
+ {
+ do
+ {
+ dbus_message_iter_recurse (&items, &entry);
+ dbus_message_iter_get_basic (&entry, &str);
+ if (str && strcmp (key, str) == 0)
+ {
+ dbus_message_iter_next (&entry);
+ dbus_message_iter_get_basic (&entry, &str);
+ return g_strdup (str);
+ }
+ }
+ while (dbus_message_iter_next (&items));
+ }
+
+ return NULL;
+}
+
+static void
+setup_ssh_environment (void)
+{
+ DBusConnection *dconn;
+ DBusMessage *reply;
+ DBusMessage *msg;
+ DBusMessageIter args;
+ DBusError derr;
+ gchar *env;
+
+ dbus_error_init (&derr);
+ dconn = dbus_bus_get (DBUS_BUS_SESSION, &derr);
+ if (!dconn)
+ return;
+
+ msg = dbus_message_new_method_call ("org.gnome.keyring",
+ "/org/gnome/keyring/daemon",
+ "org.gnome.keyring.Daemon",
+ "GetEnvironment");
+ if (!msg)
+ {
+ dbus_connection_unref (dconn);
+ return;
+ }
+
+ /* Send message and get a handle for a reply */
+ reply = dbus_connection_send_with_reply_and_block (dconn, msg, 1000, &derr);
+ dbus_message_unref (msg);
+ if (!reply)
+ {
+ dbus_connection_unref (dconn);
+ return;
+ }
+
+ /* Read the return value */
+ if (dbus_message_iter_init (reply, &args))
+ {
+ env = read_dbus_string_dict_value (&args, "SSH_AUTH_SOCK");
+ if (env && env[0])
+ g_setenv ("SSH_AUTH_SOCK", env, TRUE);
+ g_free (env);
+ }
+
+ dbus_message_unref (reply);
+ dbus_connection_unref (dconn);
+}
+
static char **
setup_ssh_commandline (GVfsBackend *backend)
{
@@ -1559,6 +1637,18 @@ do_mount (GVfsBackend *backend,
/* NOTE: job_succeeded called async from setup_icon reply */
}
+static void
+real_do_mount (GVfsBackend *backend,
+ GVfsJobMount *job,
+ GMountSpec *mount_spec,
+ GMountSource *mount_source,
+ gboolean is_automount)
+{
+ setup_ssh_environment ();
+
+ do_mount (backend, job, mount_spec, mount_source, is_automount);
+}
+
static gboolean
try_mount (GVfsBackend *backend,
GVfsJobMount *job,
@@ -4481,7 +4571,7 @@ g_vfs_backend_sftp_class_init (GVfsBacke
gobject_class->finalize = g_vfs_backend_sftp_finalize;
- backend_class->mount = do_mount;
+ backend_class->mount = real_do_mount;
backend_class->try_mount = try_mount;
backend_class->try_open_icon_for_read = try_open_icon_for_read;
backend_class->try_open_for_read = try_open_for_read;

View File

@ -1,38 +0,0 @@
From fe45df2ccfe43077d15c31e21f00f4fb98eea85c Mon Sep 17 00:00:00 2001
From: Tomas Bzatek <tbzatek@redhat.com>
Date: Thu, 7 May 2009 15:17:06 +0200
Subject: [PATCH] FTP: parse file sizes > 4GB correctly
Use 64-bit strtoull() instead of 32-bit strtoul()
when converting string to number.
https://bugzilla.redhat.com/show_bug.cgi?id=499286
---
daemon/gvfsbackendftp.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/daemon/gvfsbackendftp.c b/daemon/gvfsbackendftp.c
index e650dd0..949573d 100644
--- a/daemon/gvfsbackendftp.c
+++ b/daemon/gvfsbackendftp.c
@@ -1239,7 +1239,7 @@ dir_default_iter_process (gpointer iter,
else if (symlink)
*symlink = NULL;
- g_file_info_set_size (info, strtoul (result.fe_size, NULL, 10));
+ g_file_info_set_size (info, g_ascii_strtoull (result.fe_size, NULL, 10));
gvfs_file_info_populate_default (info, s,
type == 'f' ? G_FILE_TYPE_REGULAR :
@@ -2231,7 +2231,7 @@ create_file_info (GVfsBackendFtp *ftp, FtpConnection *conn, const char *filename
gvfs_file_info_populate_default (info, filename, G_FILE_TYPE_REGULAR);
- g_file_info_set_size (info, strtoul (conn->read_buffer+4, NULL, 0));
+ g_file_info_set_size (info, g_ascii_strtoull (conn->read_buffer+4, NULL, 0));
g_file_info_set_is_hidden (info, TRUE);
}
--
1.6.2.2

View File

@ -1,34 +0,0 @@
From edb7ccb661746fd55ed3b935b44a61d011a0807c Mon Sep 17 00:00:00 2001
From: Alexander Larsson <alexl@redhat.com>
Date: Tue, 12 May 2009 14:21:45 +0200
Subject: [PATCH 3/4] Ref the infos in next_files_finish (#582195)
In later glib versions setting the GSimpleAsyncResult gpointer data
frees the old data using the destroy notify, which can cause crashes
since we return it. So, just copy+ref the list instead of trying to steal
the asyncresult one.
---
client/gdaemonfileenumerator.c | 7 ++-----
1 files changed, 2 insertions(+), 5 deletions(-)
diff --git a/client/gdaemonfileenumerator.c b/client/gdaemonfileenumerator.c
index 56b1488..1aec092 100644
--- a/client/gdaemonfileenumerator.c
+++ b/client/gdaemonfileenumerator.c
@@ -417,11 +417,8 @@ g_daemon_file_enumerator_next_files_finish (GFileEnumerator *enumerator,
GList *l;
l = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (result));
- /* We want the caller to own this, and not the result, so clear the result data */
- g_simple_async_result_set_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (result),
- NULL, NULL);
-
- return l;
+ g_list_foreach (l, (GFunc)g_object_ref, NULL);
+ return g_list_copy (l);
}
static gboolean
--
1.6.2.2

View File

@ -1,12 +0,0 @@
diff -up gvfs-1.2.1/programs/Makefile.am.bash-completion gvfs-1.2.1/programs/Makefile.am
--- gvfs-1.2.1/programs/Makefile.am.bash-completion 2009-04-11 00:36:25.730330858 -0400
+++ gvfs-1.2.1/programs/Makefile.am 2009-04-11 00:36:37.746330659 -0400
@@ -34,7 +34,7 @@ bin_SCRIPTS = \
if ENABLE_BASHCOMP
profiledir = $(BASHCOMP_DIR)
-profile_SCRIPTS = gvfs-bash-completion.sh
+profile_DATA = gvfs-bash-completion.sh
endif
gvfs_cat_SOURCES = gvfs-cat.c

View File

@ -1,7 +1,7 @@
Summary: Backends for the gio framework in GLib
Name: gvfs
Version: 1.2.2
Release: 5%{?dist}
Version: 1.2.3
Release: 1%{?dist}
License: LGPLv2+
Group: System Environment/Libraries
URL: http://www.gtk.org
@ -35,20 +35,11 @@ BuildRequires: libtool
Patch1: gvfs-0.99.2-archive-integration.patch
# http://bugzilla.gnome.org/show_bug.cgi?id=573826
Patch2: gvfs-1.1.7-gdu-computer-expose-devices.patch
# http://bugzilla.gnome.org/show_bug.cgi?id=578681
Patch3: gvfs-bash-completion.patch
# From svn:
Patch4: gvfs-1.2.2-ssh-auth-sock.patch
# nautilus crashes when browsing ssh location after glib 2.21 update
# https://bugzilla.gnome.org/show_bug.cgi?id=582195
Patch5: gvfs-1.2.3-ref-the-infos-in-next_files_finish.patch
# Files on FTP >4GB reported as 4GB
# https://bugzilla.redhat.com/show_bug.cgi?id=499286
Patch6: gvfs-1.2.3-ftp-parse-file-sizes-4GB-correctly.patch
# Unable to Play Audio CDs
# https://bugzilla.redhat.com/show_bug.cgi?id=499266
Patch7: gvfs-1.2.3-cdda-allow-query-well-formed-filenames-only.patch
# https://bugzilla.redhat.com/show_bug.cgi?id=497631
Patch8: gvfs-1.2.2-dnssd-deadlock.patch
# Gdu volume monitor patches, from http://cgit.freedesktop.org/~david/gvfs/log/?h=gdu-volume-monitor
#
@ -168,11 +159,8 @@ media players (Media Transfer Protocol) to applications using gvfs.
%setup -q
%patch1 -p0 -b .archive-integration
%patch2 -p1 -b .computer-expose-devices
%patch3 -p1 -b .bash-completion
%patch4 -p0 -b .ssh-auth-sock
%patch5 -p1 -b .sftp-crash
%patch6 -p1 -b .ftp-bigfiles
%patch7 -p1 -b .cdda-query
%patch8 -p1 -b .dnssd-deadlock
%patch101 -p1 -b .gdu-volume-monitor
%patch102 -p1 -b .gdu-volumes-typo
@ -332,6 +320,10 @@ update-desktop-database &> /dev/null ||:
%changelog
* Mon May 18 2009 Tomas Bzatek <tbzatek@redhat.com> - 1.2.3-1
- Update to 1.2.3
- Prevent deadlocks in dnssd resolver (#497631)
* Tue May 12 2009 Tomas Bzatek <tbzatek@redhat.com> - 1.2.2-5
- Require separate libtalloc to fix libsmbclient
- Ref the infos in next_files_finish (gnome #582195)

View File

@ -1 +1 @@
85f69289185b0c9c42644c0e730b67c8 gvfs-1.2.2.tar.bz2
04a7f9c892b962cfedf0637dd2b01196 gvfs-1.2.3.tar.bz2