[tracker/wip/removable-device-completed: 4/11] libtracker-miner: Avoid processing item queue while it is blocked
- From: Sam Thursfield <sthursfield src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/wip/removable-device-completed: 4/11] libtracker-miner: Avoid processing item queue while it is blocked
- Date: Fri, 22 Jun 2012 17:29:24 +0000 (UTC)
commit f1a75073db939ca88ddaba2e7b16280ea68bbf21
Author: Sam Thursfield <sam thursfield codethink co uk>
Date: Thu Jun 14 17:52:15 2012 +0100
libtracker-miner: Avoid processing item queue while it is blocked
item_add_or_update_cb() had a call to item_queue_handlers_set_up().
This was unneccessary as the queue will already be running, except in
one the following cases:
- the extraction or SPARQL task pools are full
- the queue is blocked waiting for a specific file to process
- the queue is empty
Previously, while waiting for a file to process we might pop and
reenqueue the next file in the queue several times, which is a waste of
effort and makes it difficult to detect if the miner is stuck in an
infinite loop.
src/libtracker-miner/tracker-miner-fs.c | 12 +++++++++++-
1 files changed, 11 insertions(+), 1 deletions(-)
---
diff --git a/src/libtracker-miner/tracker-miner-fs.c b/src/libtracker-miner/tracker-miner-fs.c
index 45e1d06..8cbf160 100644
--- a/src/libtracker-miner/tracker-miner-fs.c
+++ b/src/libtracker-miner/tracker-miner-fs.c
@@ -165,6 +165,7 @@ struct _TrackerMinerFSPrivate {
GTimer *extraction_timer;
guint item_queues_handler_id;
+ gboolean item_queue_blocked;
gdouble throttle;
@@ -1194,9 +1195,15 @@ item_add_or_update_cb (TrackerMinerFS *fs,
ctxt->priority,
sparql_buffer_task_finished_cb,
fs);
+
+ if (fs->priv->item_queue_blocked == TRUE) {
+ tracker_sparql_buffer_flush (fs->priv->sparql_buffer, "Queue handlers WAIT");
+ }
}
- if (!tracker_task_pool_limit_reached (TRACKER_TASK_POOL (fs->priv->sparql_buffer))) {
+ if (tracker_miner_fs_has_items_to_process (fs) == FALSE &&
+ tracker_task_pool_get_size (TRACKER_TASK_POOL (fs->priv->task_pool)) == 0) {
+ /* We need to run this one more time to trigger process_stop() */
item_queue_handlers_set_up (fs);
}
@@ -2028,9 +2035,12 @@ item_queue_handlers_cb (gpointer user_data)
* on with the queues... */
tracker_sparql_buffer_flush (fs->priv->sparql_buffer,
"Queue handlers WAIT");
+ fs->priv->item_queue_blocked = TRUE;
return FALSE;
}
+ fs->priv->item_queue_blocked = FALSE;
+
if (file && queue != QUEUE_DELETED &&
tracker_file_is_locked (file)) {
gchar *uri;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]