summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyan Lortie <desrt@desrt.ca>2009-01-12 20:14:44 +0000
committerRyan Lortie <ryanl@src.gnome.org>2009-01-12 20:14:44 +0000
commitaa4569e08c364963ac881bd0f63a3a6915929afd (patch)
tree03bb14ea9fa904946eac36452904eec923996bba
parentf21171cff884296e3b2bbf6d4fd1602190a8065e (diff)
downloadgvfs-aa4569e08c364963ac881bd0f63a3a6915929afd.tar.gz
don't insta-thaw deletes use a timeout to only call thaw() once per batch
2009-01-12 Ryan Lortie <desrt@desrt.ca> * daemon/trashlib/trashitem.c: don't insta-thaw deletes * daemon/gvfsbackendtrash.c: use a timeout to only call thaw() once per batch of delete method calls. svn path=/trunk/; revision=2167
-rw-r--r--ChangeLog6
-rw-r--r--daemon/gvfsbackendtrash.c25
-rw-r--r--daemon/trashlib/trashitem.c2
3 files changed, 31 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 6dff1897..4f7541b9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2009-01-12 Ryan Lortie <desrt@desrt.ca>
+
+ * daemon/trashlib/trashitem.c: don't insta-thaw deletes
+ * daemon/gvfsbackendtrash.c: use a timeout to only call thaw() once
+ per batch of delete method calls.
+
2009-01-12 Matthias Clasen <mclasen@redhat.com>
* daemon/Makefile.am: Dist the dav+sd.mount.in file
diff --git a/daemon/gvfsbackendtrash.c b/daemon/gvfsbackendtrash.c
index a15b8d9f..d6ee5d65 100644
--- a/daemon/gvfsbackendtrash.c
+++ b/daemon/gvfsbackendtrash.c
@@ -36,6 +36,8 @@ struct OPAQUE_TYPE__GVfsBackendTrash
TrashWatcher *watcher;
TrashRoot *root;
+
+ guint thaw_timeout_id;
};
G_DEFINE_TYPE (GVfsBackendTrash, g_vfs_backend_trash, G_VFS_TYPE_BACKEND);
@@ -331,6 +333,28 @@ trash_backend_close_read (GVfsBackend *backend,
}
static gboolean
+trash_backend_thaw_callback (gpointer user_data)
+{
+ GVfsBackendTrash *backend = user_data;
+
+ trash_root_thaw (backend->root);
+
+ backend->thaw_timeout_id = 0;
+ return FALSE;
+}
+
+static void
+trash_backend_schedule_thaw (GVfsBackendTrash *backend)
+{
+ if (backend->thaw_timeout_id)
+ g_source_remove (backend->thaw_timeout_id);
+
+ backend->thaw_timeout_id = g_timeout_add (200,
+ trash_backend_thaw_callback,
+ backend);
+}
+
+static gboolean
trash_backend_delete (GVfsBackend *vfs_backend,
GVfsJobDelete *job,
const char *filename)
@@ -364,6 +388,7 @@ trash_backend_delete (GVfsBackend *vfs_backend,
{
if (trash_item_delete (item, &error))
{
+ trash_backend_schedule_thaw (backend);
g_vfs_job_succeeded (G_VFS_JOB (job));
trash_item_unref (item);
diff --git a/daemon/trashlib/trashitem.c b/daemon/trashlib/trashitem.c
index 3bf38af0..90b6002a 100644
--- a/daemon/trashlib/trashitem.c
+++ b/daemon/trashlib/trashitem.c
@@ -495,8 +495,6 @@ trash_item_delete (TrashItem *item,
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
"Failed to delete the item from the trash");
- trash_root_thaw (item->root);
-
return success;
}