- Updated patch, fixed deadlock whilst mounting

This commit is contained in:
Bastien Nocera 2008-09-19 18:05:08 +00:00
parent 7a4724ef20
commit 263f0c24d9
2 changed files with 34 additions and 22 deletions

View File

@ -1,15 +1,6 @@
Index: daemon/obexftp-marshal.list
===================================================================
--- daemon/obexftp-marshal.list (revision 1964)
+++ daemon/obexftp-marshal.list (working copy)
@@ -1,2 +1,4 @@
+VOID:STRING
VOID:STRING,STRING
+VOID:STRING,STRING,STRING
VOID:STRING,STRING,UINT64
Index: daemon/gvfsbackendobexftp.c Index: daemon/gvfsbackendobexftp.c
=================================================================== ===================================================================
--- daemon/gvfsbackendobexftp.c (revision 1964) --- daemon/gvfsbackendobexftp.c (revision 2008)
+++ daemon/gvfsbackendobexftp.c (working copy) +++ daemon/gvfsbackendobexftp.c (working copy)
@@ -96,6 +96,15 @@ @@ -96,6 +96,15 @@
@ -220,15 +211,16 @@ Index: daemon/gvfsbackendobexftp.c
static void static void
do_mount (GVfsBackend *backend, do_mount (GVfsBackend *backend,
GVfsJobMount *job, GVfsJobMount *job,
@@ -590,7 +641,6 @@ @@ -590,7 +641,7 @@
const gchar *path = NULL; const gchar *path = NULL;
char *server; char *server;
GMountSpec *obexftp_mount_spec; GMountSpec *obexftp_mount_spec;
- gboolean connected; - gboolean connected;
+ guint count;
g_print ("+ do_mount\n"); g_print ("+ do_mount\n");
@@ -616,10 +666,11 @@ @@ -616,10 +667,11 @@
} }
/* FIXME, Have a way for the mount to be cancelled, see: /* FIXME, Have a way for the mount to be cancelled, see:
@ -242,7 +234,7 @@ Index: daemon/gvfsbackendobexftp.c
DBUS_TYPE_G_OBJECT_PATH, &path, G_TYPE_INVALID) == FALSE) DBUS_TYPE_G_OBJECT_PATH, &path, G_TYPE_INVALID) == FALSE)
{ {
g_free (op_backend->bdaddr); g_free (op_backend->bdaddr);
@@ -676,14 +727,10 @@ @@ -676,14 +728,20 @@
G_TYPE_STRING, G_TYPE_STRING, G_TYPE_UINT64, G_TYPE_INVALID); G_TYPE_STRING, G_TYPE_STRING, G_TYPE_UINT64, G_TYPE_INVALID);
/* Now wait until the device is connected */ /* Now wait until the device is connected */
@ -252,29 +244,46 @@ Index: daemon/gvfsbackendobexftp.c
- g_usleep (G_USEC_PER_SEC / 100); - g_usleep (G_USEC_PER_SEC / 100);
- connected = is_connected (op_backend->session_proxy, G_VFS_JOB (job)); - connected = is_connected (op_backend->session_proxy, G_VFS_JOB (job));
- } - }
+ while (op_backend->status == ASYNC_PENDING) + count = 0;
+ g_cond_wait (op_backend->cond, op_backend->mutex); + g_mutex_lock (op_backend->mutex);
- if (connected < 0) - if (connected < 0)
+ if (op_backend->status == ASYNC_ERROR) + while (op_backend->status == ASYNC_PENDING && count < 100) {
+ GTimeVal val;
+ g_get_current_time (&val);
+ g_time_val_add (&val, 100000);
+ count++;
+ if (g_cond_timed_wait (op_backend->cond, op_backend->mutex, &val) != FALSE)
+ break;
+ }
+ g_mutex_unlock (op_backend->mutex);
+
+ if (op_backend->status == ASYNC_ERROR || op_backend->status == ASYNC_PENDING)
{ {
g_message ("mount failed, didn't connect"); g_message ("mount failed, didn't connect");
@@ -694,11 +741,10 @@ @@ -694,12 +752,17 @@
g_object_unref (op_backend->session_proxy); g_object_unref (op_backend->session_proxy);
op_backend->session_proxy = NULL; op_backend->session_proxy = NULL;
- g_vfs_job_failed (G_VFS_JOB (job), - g_vfs_job_failed (G_VFS_JOB (job),
- G_IO_ERROR, G_IO_ERROR_BUSY, - G_IO_ERROR, G_IO_ERROR_BUSY,
- _("Connection to the device lost")); - _("Connection to the device lost"));
+ g_vfs_job_failed_from_error (G_VFS_JOB (job), op_backend->error); + if (op_backend->status != ASYNC_PENDING)
+ g_vfs_job_failed_from_error (G_VFS_JOB (job), op_backend->error);
+ else
+ g_vfs_job_failed (G_VFS_JOB (job),
+ G_IO_ERROR, G_IO_ERROR_BUSY,
+ _("Connection to the device lost"));
return; return;
} }
+ op_backend->status = ASYNC_PENDING;
+ op_backend->status = ASYNC_PENDING;
+
g_vfs_job_succeeded (G_VFS_JOB (job)); g_vfs_job_succeeded (G_VFS_JOB (job));
@@ -1482,6 +1528,12 @@ g_print ("- do_mount\n");
@@ -1482,6 +1545,12 @@
/* TransferStarted */ /* TransferStarted */
dbus_g_object_register_marshaller(obexftp_marshal_VOID__STRING_STRING_UINT64, dbus_g_object_register_marshaller(obexftp_marshal_VOID__STRING_STRING_UINT64,
G_TYPE_NONE, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_UINT64, G_TYPE_INVALID); G_TYPE_NONE, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_UINT64, G_TYPE_INVALID);

View File

@ -1,7 +1,7 @@
Summary: Backends for the gio framework in GLib Summary: Backends for the gio framework in GLib
Name: gvfs Name: gvfs
Version: 0.99.8 Version: 0.99.8
Release: 4%{?dist} Release: 5%{?dist}
License: LGPLv2+ License: LGPLv2+
Group: System Environment/Libraries Group: System Environment/Libraries
URL: http://www.gtk.org URL: http://www.gtk.org
@ -30,7 +30,7 @@ BuildRequires: automake autoconf
BuildRequires: libtool BuildRequires: libtool
Patch1: gvfs-0.99.2-archive-integration.patch Patch1: gvfs-0.99.2-archive-integration.patch
Patch2: gvfs-obexftp-updated-apis.patch Patch2: gvfs-obexftp-updated-apis-2.patch
# http://bugzilla.gnome.org/show_bug.cgi?id=524498 # http://bugzilla.gnome.org/show_bug.cgi?id=524498
Patch3: gvfs-0.99.8-smb-kerberos-auth.patch Patch3: gvfs-0.99.8-smb-kerberos-auth.patch
@ -255,6 +255,9 @@ update-desktop-database &> /dev/null ||:
%changelog %changelog
* Fri Sep 19 2008 - Bastien Nocera <bnocera@redhat.com> - 0.99.8-5
- Updated patch, fixed deadlock whilst mounting
* Wed Sep 17 2008 Tomas Bzatek <tbzatek@redhat.com> - 0.99.8-4 * Wed Sep 17 2008 Tomas Bzatek <tbzatek@redhat.com> - 0.99.8-4
- Actually apply the kerberos patch - Actually apply the kerberos patch