[tracker] tracker-store: writeback: Do the transaction trick for Writeback too
- From: Philip Van Hoof <pvanhoof src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker] tracker-store: writeback: Do the transaction trick for Writeback too
- Date: Wed, 1 Sep 2010 15:19:49 +0000 (UTC)
commit 75ea296775b4cbc6813e9b096423138215258fc7
Author: Philip Van Hoof <philip codeminded be>
Date: Thu Aug 26 17:30:45 2010 +0200
tracker-store: writeback: Do the transaction trick for Writeback too
src/tracker-store/tracker-resources.c | 3 ++
src/tracker-store/tracker-writeback.c | 53 ++++++++++++++++++++++++++------
src/tracker-store/tracker-writeback.h | 1 +
3 files changed, 47 insertions(+), 10 deletions(-)
---
diff --git a/src/tracker-store/tracker-resources.c b/src/tracker-store/tracker-resources.c
index 4deb263..87a712f 100644
--- a/src/tracker-store/tracker-resources.c
+++ b/src/tracker-store/tracker-resources.c
@@ -658,6 +658,9 @@ on_statements_committed (gpointer user_data)
TrackerClass *class = key;
tracker_class_transact_events (class);
}
+
+ /* Writeback feature */
+ tracker_writeback_transact ();
}
diff --git a/src/tracker-store/tracker-writeback.c b/src/tracker-store/tracker-writeback.c
index 73c785a..f0bb8bb 100644
--- a/src/tracker-store/tracker-writeback.c
+++ b/src/tracker-store/tracker-writeback.c
@@ -28,7 +28,8 @@
typedef struct {
GHashTable *allowances;
- GHashTable *events;
+ GHashTable *pending_events;
+ GHashTable *ready_events;
} WritebackPrivate;
static WritebackPrivate *private;
@@ -78,13 +79,16 @@ tracker_writeback_check (gint graph_id,
g_return_if_fail (private != NULL);
if (g_hash_table_lookup (private->allowances, GINT_TO_POINTER (pred_id))) {
- if (!private->events) {
- private->events = g_hash_table_new_full (g_direct_hash, g_direct_equal,
- (GDestroyNotify) NULL,
- (GDestroyNotify) array_free);
+ if (!private->ready_events || !private->pending_events) {
+ private->ready_events = g_hash_table_new_full (g_direct_hash, g_direct_equal,
+ (GDestroyNotify) NULL,
+ (GDestroyNotify) array_free);
+ private->pending_events = g_hash_table_new_full (g_direct_hash, g_direct_equal,
+ (GDestroyNotify) NULL,
+ (GDestroyNotify) NULL);
}
- g_hash_table_insert (private->events,
+ g_hash_table_insert (private->pending_events,
GINT_TO_POINTER (subject_id),
rdf_types_to_array (rdf_types));
}
@@ -95,9 +99,21 @@ tracker_writeback_reset (void)
{
g_return_if_fail (private != NULL);
- if (private->events) {
- g_hash_table_unref (private->events);
- private->events = NULL;
+ if (private->pending_events && private->ready_events) {
+ GHashTableIter iter;
+ gpointer key, value;
+
+ g_hash_table_iter_init (&iter, private->pending_events);
+
+ while (g_hash_table_iter_next (&iter, &key, &value)) {
+ g_hash_table_insert (private->ready_events, key, value);
+ g_hash_table_iter_remove (&iter);
+ }
+ g_hash_table_unref (private->ready_events);
+ g_hash_table_unref (private->pending_events);
+
+ private->ready_events = NULL;
+ private->pending_events = NULL;
}
}
@@ -106,7 +122,7 @@ tracker_writeback_get_pending (void)
{
g_return_val_if_fail (private != NULL, NULL);
- return private->events;
+ return private->ready_events;
}
static void
@@ -165,6 +181,23 @@ tracker_writeback_init (TrackerWritebackGetPredicatesFunc func)
}
void
+tracker_writeback_transact (void)
+{
+ GHashTableIter iter;
+ gpointer key, value;
+
+ if (!private->pending_events)
+ return;
+
+ g_hash_table_iter_init (&iter, private->pending_events);
+
+ while (g_hash_table_iter_next (&iter, &key, &value)) {
+ g_hash_table_insert (private->ready_events, key, value);
+ g_hash_table_iter_remove (&iter);
+ }
+}
+
+void
tracker_writeback_shutdown (void)
{
g_return_if_fail (private != NULL);
diff --git a/src/tracker-store/tracker-writeback.h b/src/tracker-store/tracker-writeback.h
index 907c601..b141665 100644
--- a/src/tracker-store/tracker-writeback.h
+++ b/src/tracker-store/tracker-writeback.h
@@ -41,6 +41,7 @@ void tracker_writeback_check (gint graph_id,
GPtrArray *rdf_types);
GHashTable* tracker_writeback_get_pending (void);
void tracker_writeback_reset (void);
+void tracker_writeback_transact (void);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]