diff options
author | Ryan Lortie <desrt@desrt.ca> | 2009-01-12 20:14:44 +0000 |
---|---|---|
committer | Ryan Lortie <ryanl@src.gnome.org> | 2009-01-12 20:14:44 +0000 |
commit | aa4569e08c364963ac881bd0f63a3a6915929afd (patch) | |
tree | 03bb14ea9fa904946eac36452904eec923996bba | |
parent | f21171cff884296e3b2bbf6d4fd1602190a8065e (diff) | |
download | gvfs-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-- | ChangeLog | 6 | ||||
-rw-r--r-- | daemon/gvfsbackendtrash.c | 25 | ||||
-rw-r--r-- | daemon/trashlib/trashitem.c | 2 |
3 files changed, 31 insertions, 2 deletions
@@ -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; } |