From 58da1a0a868c4e2cbcab22de505af02d7c399124 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Tue, 21 Jul 2015 21:03:04 +0200 Subject: libtracker-miner: Remove operations on children on deleted folders This is an optimization to reduce the number of queries that we perform across the deletion of large directory trees. --- src/libtracker-miner/tracker-miner-fs.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/libtracker-miner/tracker-miner-fs.c b/src/libtracker-miner/tracker-miner-fs.c index ef53ff44a..72bba02e9 100644 --- a/src/libtracker-miner/tracker-miner-fs.c +++ b/src/libtracker-miner/tracker-miner-fs.c @@ -2884,6 +2884,30 @@ check_item_queues (TrackerMinerFS *fs, cancel_writeback_task (fs, file); } + if (tracker_file_notifier_get_file_type (fs->priv->file_notifier, + file) == G_FILE_TYPE_DIRECTORY) { + if (tracker_priority_queue_foreach_remove (fs->priv->items_updated, + (GEqualFunc) g_file_has_parent, + file, + (GDestroyNotify) g_object_unref)) { + g_debug (" Deleting previous unhandled UPDATED events on children"); + } + + if (tracker_priority_queue_foreach_remove (fs->priv->items_created, + (GEqualFunc) g_file_has_parent, + file, + (GDestroyNotify) g_object_unref)) { + g_debug (" Deleting previous unhandled CREATED events on children"); + } + + if (tracker_priority_queue_foreach_remove (fs->priv->items_deleted, + (GEqualFunc) g_file_has_parent, + file, + (GDestroyNotify) g_object_unref)) { + g_debug (" Deleting previous unhandled DELETED events on children"); + } + } + /* Remove all previous updates */ if (tracker_priority_queue_foreach_remove (fs->priv->items_updated, (GEqualFunc) g_file_equal, -- cgit v1.2.1