summaryrefslogtreecommitdiff
path: root/daemon
diff options
context:
space:
mode:
authorBenjamin Otte <otte@gnome.org>2008-03-12 15:36:00 +0000
committerBenjamin Otte <otte@src.gnome.org>2008-03-12 15:36:00 +0000
commit14200388351c1bdbd45a70d814b76f108b033c8c (patch)
tree9858168de04c63f9b2463e71cfa7b5c4a525b18c /daemon
parent79c3980575577951e2ecac4f4ec368e8c718be85 (diff)
downloadgvfs-14200388351c1bdbd45a70d814b76f108b033c8c.tar.gz
invalidate the cache of directories that we modified ourselves. allow 10
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 svn path=/trunk/; revision=1647
Diffstat (limited to 'daemon')
-rw-r--r--daemon/Makefile.am2
-rw-r--r--daemon/gvfsbackendftp.c38
2 files changed, 38 insertions, 2 deletions
diff --git a/daemon/Makefile.am b/daemon/Makefile.am
index f901e4c5..d2da3206 100644
--- a/daemon/Makefile.am
+++ b/daemon/Makefile.am
@@ -222,7 +222,7 @@ gvfsd_ftp_SOURCES = \
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,'
diff --git a/daemon/gvfsbackendftp.c b/daemon/gvfsbackendftp.c
index 8cc46e41..ce57e6c8 100644
--- a/daemon/gvfsbackendftp.c
+++ b/daemon/gvfsbackendftp.c
@@ -1529,6 +1529,34 @@ do_start_write (GVfsBackendFtp *ftp,
}
}
+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 @@ do_create (GVfsBackend *backend,
}
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 @@ do_append (GVfsBackend *backend,
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 @@ do_replace (GVfsBackend *backend,
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 @@ do_set_display_name (GVfsBackend *backend,
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 @@ do_set_display_name (GVfsBackend *backend,
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 @@ do_delete (GVfsBackend *backend,
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 @@ do_make_directory (GVfsBackend *backend,
"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 @@ do_move (GVfsBackend *backend,
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);