[tracker/tracker-0.6] Make sync/async flush functions to stop on any error.



commit 02e1110b38b40fcd08756d5a49af987b39599973
Author: Carlos Garnacho <carlosg gnome org>
Date:   Thu May 14 14:16:49 2009 +0200

    Make sync/async flush functions to stop on any error.
---
 src/libtracker-db/tracker-db-index.c |   26 ++++++++++++++++++++++----
 1 files changed, 22 insertions(+), 4 deletions(-)

diff --git a/src/libtracker-db/tracker-db-index.c b/src/libtracker-db/tracker-db-index.c
index 42b5b92..383ada5 100644
--- a/src/libtracker-db/tracker-db-index.c
+++ b/src/libtracker-db/tracker-db-index.c
@@ -839,6 +839,7 @@ index_flush_item (gpointer user_data)
 	}
 
 	if (priv->cache_layers && g_hash_table_size (priv->cache_layers->data) > 0) {
+		gboolean error = FALSE;
 		GTimer *timer;
 
 		timer = g_timer_new ();
@@ -850,6 +851,7 @@ index_flush_item (gpointer user_data)
 				g_hash_table_iter_remove (&iter);
 			} else {
 				emit_error_received (indez, _("Index corrupted"));
+				error = TRUE;
 				break;
 			}
 
@@ -860,7 +862,14 @@ index_flush_item (gpointer user_data)
 
 		g_timer_destroy (timer);
 
-		return TRUE;
+		if (!error) {
+			return TRUE;
+		} else {
+			set_in_flush (indez, FALSE);
+			priv->idle_flush_id = 0;
+
+			return FALSE;
+		}
 	} else {
 		GList *link;
 
@@ -1086,9 +1095,18 @@ tracker_db_index_flush_sync (TrackerDBIndex *indez)
 	}
 
 	for (cache = priv->cache_layers; cache; cache = cache->next) {
-		g_hash_table_foreach_remove (cache->data,
-					     (GHRFunc) indexer_update_word,
-					     priv->index);
+		GHashTableIter iter;
+		gpointer key, value;
+
+		g_hash_table_iter_init (&iter, cache->data);
+
+		while (g_hash_table_iter_next (&iter, &key, &value)) {
+			if (indexer_update_word (key, value, priv->index)) {
+				g_hash_table_iter_remove (&iter);
+			} else {
+				break;
+			}
+		}
 	}
 
 	g_list_foreach (priv->cache_layers, (GFunc) g_hash_table_destroy, NULL);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]