diff options
-rw-r--r-- | src/tracker-store/tracker-events.c | 29 | ||||
-rw-r--r-- | src/tracker-store/tracker-events.h | 2 | ||||
-rw-r--r-- | src/tracker-store/tracker-events.vapi | 2 | ||||
-rw-r--r-- | src/tracker-store/tracker-resources.vala | 5 |
4 files changed, 20 insertions, 18 deletions
diff --git a/src/tracker-store/tracker-events.c b/src/tracker-store/tracker-events.c index 05782b2c5..77de4c256 100644 --- a/src/tracker-store/tracker-events.c +++ b/src/tracker-store/tracker-events.c @@ -41,9 +41,13 @@ struct _TrackerEventBatch }; typedef struct { - guint total; - GHashTable *pending; + /* Accessed by updates/dbus threads */ + GMutex mutex; GHashTable *ready; + + /* Only accessed by updates thread */ + GHashTable *pending; + guint total; } EventsPrivate; static EventsPrivate *private; @@ -219,19 +223,11 @@ tracker_event_batch_merge (TrackerEventBatch *dest, } guint -tracker_events_get_total (gboolean and_reset) +tracker_events_get_total (void) { - guint total; - g_return_val_if_fail (private != NULL, 0); - total = private->total; - - if (and_reset) { - private->total = 0; - } - - return total; + return private->total; } static inline TrackerEventBatch * @@ -326,6 +322,8 @@ tracker_events_transact (void) if (!private->pending || g_hash_table_size (private->pending) == 0) return; + g_mutex_lock (&private->mutex); + if (!private->ready) { private->ready = tracker_event_batch_hashtable_new (); } @@ -349,6 +347,10 @@ tracker_events_transact (void) g_object_unref (rdf_type); } } + + private->total = 0; + + g_mutex_unlock (&private->mutex); } void @@ -370,6 +372,7 @@ void tracker_events_init (void) { private = g_new0 (EventsPrivate, 1); + g_mutex_init (&private->mutex); } void @@ -390,8 +393,10 @@ tracker_events_get_pending (void) g_return_val_if_fail (private != NULL, NULL); + g_mutex_lock (&private->mutex); pending = private->ready; private->ready = NULL; + g_mutex_unlock (&private->mutex); return pending; } diff --git a/src/tracker-store/tracker-events.h b/src/tracker-store/tracker-events.h index 4d6ff4e1e..1aea15ab6 100644 --- a/src/tracker-store/tracker-events.h +++ b/src/tracker-store/tracker-events.h @@ -52,7 +52,7 @@ void tracker_events_add_delete (gint graph_id, gint object_id, const gchar *object, GPtrArray *rdf_types); -guint tracker_events_get_total (gboolean and_reset); +guint tracker_events_get_total (void); void tracker_events_reset_pending (void); void tracker_events_transact (void); diff --git a/src/tracker-store/tracker-events.vapi b/src/tracker-store/tracker-events.vapi index da47267b9..16df92e84 100644 --- a/src/tracker-store/tracker-events.vapi +++ b/src/tracker-store/tracker-events.vapi @@ -24,7 +24,7 @@ namespace Tracker { public void shutdown (); public void add_insert (int graph_id, int subject_id, string subject, int pred_id, int object_id, string object, GLib.PtrArray rdf_types); public void add_delete (int graph_id, int subject_id, string subject, int pred_id, int object_id, string object, GLib.PtrArray rdf_types); - public uint get_total (bool and_reset); + public uint get_total (); public void reset_pending (); public void transact (); diff --git a/src/tracker-store/tracker-resources.vala b/src/tracker-store/tracker-resources.vala index 0635b4f23..9d9b83c18 100644 --- a/src/tracker-store/tracker-resources.vala +++ b/src/tracker-store/tracker-resources.vala @@ -236,9 +236,6 @@ public class Tracker.Resources : Object { } } - /* Reset counter */ - Tracker.Events.get_total (true); - /* Writeback feature */ var writebacks = Tracker.Writeback.get_ready (); @@ -289,7 +286,7 @@ public class Tracker.Resources : Object { void check_graph_updated_signal () { /* Check for whether we need an immediate emit */ - if (Tracker.Events.get_total (false) > GRAPH_UPDATED_IMMEDIATE_EMIT_AT) { + if (Tracker.Events.get_total () > GRAPH_UPDATED_IMMEDIATE_EMIT_AT) { // possibly active timeout no longer necessary as signals // for committed transactions will be emitted by the following on_emit_signals call // do this before actually calling on_emit_signals as on_emit_signals sets signal_timeout to 0 |