rpms/gvfs/devel gvfs-fuse-threading.patch, NONE, 1.1 gvfs.spec, 1.46, 1.47

Matthias Clasen (mclasen) fedora-extras-commits at redhat.com
Sat Apr 19 01:18:28 UTC 2008


Author: mclasen

Update of /cvs/extras/rpms/gvfs/devel
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv18693

Modified Files:
	gvfs.spec 
Added Files:
	gvfs-fuse-threading.patch 
Log Message:
Fix thread-safety issues in gvfs-fuse-daemon


gvfs-fuse-threading.patch:

--- NEW FILE gvfs-fuse-threading.patch ---
Index: client/gvfsfusedaemon.c
===================================================================
--- client/gvfsfusedaemon.c	(revision 1744)
+++ client/gvfsfusedaemon.c	(working copy)
@@ -71,6 +71,8 @@
 } FileOp;
 
 typedef struct {
+  gint      refcount;
+
   GMutex   *mutex;
   FileOp    op;
   gpointer  stream;
@@ -188,12 +190,26 @@
   FileHandle *file_handle;
 
   file_handle = g_new0 (FileHandle, 1);
+  file_handle->refcount = 1;
   file_handle->mutex = g_mutex_new ();
   file_handle->op = FILE_OP_NONE;
 
   return file_handle;
 }
 
+static FileHandle *
+file_handle_ref (FileHandle *file_handle)
+{
+  g_atomic_int_inc (&file_handle->refcount);
+  return file_handle;
+}
+
+static gboolean
+file_handle_unref (FileHandle *file_handle)
+{
+  return g_atomic_int_dec_and_test (&file_handle->refcount);
+}
+
 static void
 file_handle_close_stream (FileHandle *file_handle)
 {
@@ -278,21 +294,19 @@
   g_static_mutex_unlock (&global_mutex);
 }
 
-static gboolean
+static void
 free_file_handle_for_path (const gchar *path)
 {
   FileHandle *fh;
 
-  fh = get_file_handle_for_path (path);
+  g_static_mutex_lock (&global_mutex);
+  fh = g_hash_table_lookup (global_fh_table, path);
   if (fh)
     {
-      g_static_mutex_lock (&global_mutex);
-      g_hash_table_remove (global_fh_table, path);
-      g_static_mutex_unlock (&global_mutex);
-      return TRUE;
+      if (file_handle_unref (fh))
+        g_hash_table_remove (global_fh_table, path);
     }
-
-  return FALSE;
+  g_static_mutex_unlock (&global_mutex);
 }
 
 static MountRecord *
@@ -923,6 +937,7 @@
               
               /* File exists */
 
+              file_handle_ref (fh);
               SET_FILE_HANDLE (fi, fh);
 
               debug_print ("vfs_open: flags=%o\n", fi->flags);
@@ -1013,6 +1028,7 @@
 
               /* Success */
 
+              file_handle_ref (fh);
               SET_FILE_HANDLE (fi, fh);
 
               g_assert (fh->stream == NULL);



Index: gvfs.spec
===================================================================
RCS file: /cvs/extras/rpms/gvfs/devel/gvfs.spec,v
retrieving revision 1.46
retrieving revision 1.47
diff -u -r1.46 -r1.47
--- gvfs.spec	17 Apr 2008 23:59:15 -0000	1.46
+++ gvfs.spec	19 Apr 2008 01:17:52 -0000	1.47
@@ -1,7 +1,7 @@
 Summary: Backends for the gio framework in GLib
 Name: gvfs
 Version: 0.2.3
-Release: 7%{?dist}
+Release: 8%{?dist}
 License: LGPLv2+
 Group: System Environment/Libraries
 URL: http://www.gtk.org
@@ -41,6 +41,9 @@
 Patch6: gvfs-gphoto-automount.patch
 Patch7: gvfs-unmount-scheme.patch
 
+# http://mail.gnome.org/archives/gvfs-list/2008-April/msg00017.html
+Patch8: gvfs-fuse-threading.patch
+
 %description
 The gvfs package provides backend implementations for the gio 
 framework in GLib. It includes ftp, sftp, cifs. 
@@ -75,6 +78,7 @@
 %patch5 -p1 -b .gphoto-unmount-hang
 %patch6 -p1 -b .gphoto-automount
 %patch7 -p1 -b .unmount-scheme
+%patch8 -p0 -b .fuse-threading
 
 %build
 
@@ -180,7 +184,7 @@
 %dir %{_includedir}/gvfs-client/gvfs
 %{_includedir}/gvfs-client/gvfs/gvfsurimapper.h
 %{_includedir}/gvfs-client/gvfs/gvfsuriutils.h
-%{_libdir}/libgvfscommon.so
+
 
 %files fuse
 %defattr(-, root, root, -)
@@ -188,6 +192,9 @@
 
 
 %changelog
+* Fri Apr 18 2008 Matthias Clasen <mclasen at redhat.com> - 0.2.3-8
+- Fix thread-safety issues in gvfs-fuse-daemon
+
 * Thu Apr 17 2008 David Zeuthen <davidz at redhat.com> - 0.2.3-7
 - Put X-Gnome-Vfs-System=gio into mount-archarive.desktop (See #442835)
 




More information about the scm-commits mailing list