gvfs r1647 - in trunk: . daemon



Author: otte
Date: Wed Mar 12 15:36:00 2008
New Revision: 1647
URL: http://svn.gnome.org/viewvc/gvfs?rev=1647&view=rev

Log:
2008-03-12  Benjamin Otte  <otte gnome org>

	* daemon/gvfsbackendftp.c:
	invalidate the cache of directories that we modified ourselves.
	* daemon/Makefile.am:
	allow 10 threads in parallel



Modified:
   trunk/ChangeLog
   trunk/daemon/Makefile.am
   trunk/daemon/gvfsbackendftp.c

Modified: trunk/daemon/Makefile.am
==============================================================================
--- trunk/daemon/Makefile.am	(original)
+++ trunk/daemon/Makefile.am	Wed Mar 12 15:36:00 2008
@@ -222,7 +222,7 @@
 gvfsd_ftp_CPPFLAGS = \
 	-DBACKEND_HEADER=gvfsbackendftp.h \
 	-DDEFAULT_BACKEND_TYPE=ftp \
-	-DMAX_JOB_THREADS=1 \
+	-DMAX_JOB_THREADS=10 \
 	$(HTTP_CFLAGS) \
 	-DBACKEND_TYPES='"ftp", G_VFS_TYPE_BACKEND_FTP,'
 

Modified: trunk/daemon/gvfsbackendftp.c
==============================================================================
--- trunk/daemon/gvfsbackendftp.c	(original)
+++ trunk/daemon/gvfsbackendftp.c	Wed Mar 12 15:36:00 2008
@@ -1529,6 +1529,34 @@
     }
 }
 
+static void
+gvfs_backend_ftp_purge_cache_directory (GVfsBackendFtp *ftp,
+					const FtpFile * dir)
+{
+  g_static_rw_lock_writer_lock (&ftp->directory_cache_lock);
+  g_hash_table_remove (ftp->directory_cache, dir);
+  g_static_rw_lock_writer_unlock (&ftp->directory_cache_lock);
+}
+
+static void
+gvfs_backend_ftp_purge_cache_of_file (GVfsBackendFtp *ftp,
+				      FtpConnection * conn,
+				      const FtpFile * file)
+{
+  char *dirname, *filename;
+  FtpFile *dir;
+
+  filename = ftp_filename_to_gvfs_path (conn, file);
+  dirname = g_path_get_dirname (filename);
+  dir = ftp_filename_from_gvfs_path (conn, dirname);
+
+  gvfs_backend_ftp_purge_cache_directory (ftp, dir);
+
+  g_free (dir);
+  g_free (filename);
+  g_free (dirname);
+}
+
 /* forward declaration */
 static GFileInfo *
 create_file_info (GVfsBackendFtp *ftp, FtpConnection *conn, const char *filename, char **symlink);
@@ -1560,6 +1588,7 @@
     }
   file = ftp_filename_from_gvfs_path (conn, filename);
   do_start_write (ftp, conn, flags, "STOR %s", file);
+  gvfs_backend_ftp_purge_cache_of_file (ftp, conn, file);
   g_free (file);
   return;
 
@@ -1583,6 +1612,7 @@
 
   file = ftp_filename_from_gvfs_path (conn, filename);
   do_start_write (ftp, conn, flags, "APPE %s", filename);
+  gvfs_backend_ftp_purge_cache_of_file (ftp, conn, file);
   g_free (file);
   return;
 }
@@ -1615,6 +1645,7 @@
 
   file = ftp_filename_from_gvfs_path (conn, filename);
   do_start_write (ftp, conn, flags, "STOR %s", file);
+  gvfs_backend_ftp_purge_cache_of_file (ftp, conn, file);
   g_free (file);
   return;
 }
@@ -2050,7 +2081,6 @@
   dir = ftp_filename_from_gvfs_path (conn, name);
   g_free (name);
   now = ftp_filename_construct (conn, dir, display_name);
-  g_free (dir);
   if (now == NULL)
     {
       g_set_error (&conn->error, 
@@ -2070,6 +2100,8 @@
   g_free (now);
   g_vfs_job_set_display_name_set_new_path (job, name);
   g_free (name);
+  gvfs_backend_ftp_purge_cache_directory (ftp, dir);
+  g_free (dir);
   g_vfs_backend_ftp_push_connection (ftp, conn);
 }
 
@@ -2098,6 +2130,7 @@
 			 0,
 			 "RMD %s", file);
 
+  gvfs_backend_ftp_purge_cache_of_file (ftp, conn, file);
   g_free (file);
   g_vfs_backend_ftp_push_connection (ftp, conn);
 }
@@ -2121,6 +2154,7 @@
 		       "MKD %s", file);
   /* FIXME: Compare created file with name from server result to be sure 
    * it's correct and otherwise fail. */
+  gvfs_backend_ftp_purge_cache_of_file (ftp, conn, file);
   g_free (file);
 
   g_vfs_backend_ftp_push_connection (ftp, conn);
@@ -2198,6 +2232,8 @@
 		       0,
 		       "RNTO %s", destfile);
 
+  gvfs_backend_ftp_purge_cache_of_file (ftp, conn, srcfile);
+  gvfs_backend_ftp_purge_cache_of_file (ftp, conn, destfile);
 out:
   g_free (srcfile);
   g_free (destfile);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]