[tracker/tracker-store-queue] Fixed the TTL loader to yield to the GMainLoop while queuing up
- From: Philip Van Hoof <pvanhoof src gnome org>
- To: svn-commits-list gnome org
- Subject: [tracker/tracker-store-queue] Fixed the TTL loader to yield to the GMainLoop while queuing up
- Date: Thu, 21 May 2009 12:16:19 -0400 (EDT)
commit f95f031d4298010d2986ee68eebfbac4b306ce42
Author: Philip Van Hoof <philip codeminded be>
Date: Thu May 21 18:15:29 2009 +0200
Fixed the TTL loader to yield to the GMainLoop while queuing up
---
src/tracker-store/tracker-resources.c | 49 ++++++++++++++++++++++++------
src/tracker-store/tracker-store-queue.c | 3 +-
2 files changed, 41 insertions(+), 11 deletions(-)
diff --git a/src/tracker-store/tracker-resources.c b/src/tracker-store/tracker-resources.c
index 551aa59..51d4447 100644
--- a/src/tracker-store/tracker-resources.c
+++ b/src/tracker-store/tracker-resources.c
@@ -290,10 +290,13 @@ turtle_update_callback (GError *error, gpointer user_data)
g_object_unref (object);
}
-static void
-process_turtle_file_part (TrackerResources *object)
+static gboolean
+process_turtle_idle (gpointer user_data)
{
+ TrackerResources *object = user_data;
TrackerResourcesPrivate *priv;
+ guint i = 0;
+ gboolean cont = FALSE;
priv = TRACKER_RESOURCES_GET_PRIVATE (object);
@@ -303,19 +306,42 @@ process_turtle_file_part (TrackerResources *object)
}
while (tracker_turtle_reader_next ()) {
- tracker_store_queue_batch_insert_statement (tracker_turtle_reader_get_subject (),
- tracker_turtle_reader_get_predicate (),
- tracker_turtle_reader_get_object (),
- turtle_update_callback,
- g_object_ref (object),
- NULL);
+ const gchar *subject = tracker_turtle_reader_get_subject ();
+ const gchar *predicate = tracker_turtle_reader_get_predicate ();
+ const gchar *object_ = tracker_turtle_reader_get_object ();
+
+ if (subject && predicate && object_) {
+ tracker_store_queue_batch_insert_statement (subject,
+ predicate,
+ object_,
+ turtle_update_callback,
+ g_object_ref (object),
+ NULL);
+ }
+
+ cont = TRUE;
+
+ if (i > 100) {
+ break;
+ }
+
+ i++;
}
+ return cont;
+}
+
+static void
+process_turtle_destroy (gpointer user_data)
+{
+ TrackerResources *object = user_data;
+
tracker_store_queue_batch_commit (turtle_commit_callback,
g_object_ref (object),
NULL);
-}
+ g_object_unref (object);
+}
void
tracker_resources_load (TrackerResources *object,
@@ -342,7 +368,10 @@ tracker_resources_load (TrackerResources *object,
tracker_turtle_reader_init (path, NULL);
- process_turtle_file_part (object);
+ g_idle_add_full (G_PRIORITY_DEFAULT,
+ process_turtle_idle,
+ g_object_ref (object),
+ process_turtle_destroy);
g_free (path);
g_object_unref (file);
diff --git a/src/tracker-store/tracker-store-queue.c b/src/tracker-store/tracker-store-queue.c
index f19a6cd..54673f9 100644
--- a/src/tracker-store/tracker-store-queue.c
+++ b/src/tracker-store/tracker-store-queue.c
@@ -83,7 +83,7 @@ tracker_store_queue_task_free (TrackerStoreQueueTask *task)
if (task->type >= TRACKER_STORE_QUEUE_TASK_TYPE_INSERT_STATEMENT) {
g_free (task->data.statement.subject);
g_free (task->data.statement.predicate);
- g_free (task->data.statement.predicate);
+ g_free (task->data.statement.object);
} else {
g_free (task->data.query);
}
@@ -225,6 +225,7 @@ static void
start_handler (TrackerStoreQueuePrivate *private)
{
im_done = FALSE;
+ private->have_handler = TRUE;
g_idle_add_full (G_PRIORITY_DEFAULT,
queue_idle_handler,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]