summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/tracker-store/tracker-events.c29
-rw-r--r--src/tracker-store/tracker-events.h2
-rw-r--r--src/tracker-store/tracker-events.vapi2
-rw-r--r--src/tracker-store/tracker-resources.vala5
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