summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2019-03-04 13:28:12 +0100
committerCarlos Garnacho <carlosg@gnome.org>2019-03-04 13:34:52 +0100
commit66fc15e91bb2ac18e5bf5a15f1f0ac5d8f4e56bf (patch)
tree83b584de24d38b6badb77d8b797cfbf7d90fd639
parentf12117dfcd1f8e61cb7151834e8fe6f688bba232 (diff)
downloadtracker-66fc15e91bb2ac18e5bf5a15f1f0ac5d8f4e56bf.tar.gz
libtracker-miner: Dispose cached events on MONITOR_EVENT_DELETED
I don't know if this is possible, but in case that happens we should drop the event either way, and neutralize CREATED+DELETED events early on.
-rw-r--r--src/libtracker-miner/tracker-monitor.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/libtracker-miner/tracker-monitor.c b/src/libtracker-miner/tracker-monitor.c
index c4a7278e2..f87a5b672 100644
--- a/src/libtracker-miner/tracker-monitor.c
+++ b/src/libtracker-miner/tracker-monitor.c
@@ -659,6 +659,7 @@ monitor_event_cb (GFileMonitor *file_monitor,
gchar *other_file_uri;
gboolean is_directory = FALSE;
TrackerMonitorPrivate *priv;
+ gpointer value;
monitor = user_data;
priv = tracker_monitor_get_instance_private (monitor);
@@ -707,6 +708,18 @@ monitor_event_cb (GFileMonitor *file_monitor,
}
break;
case G_FILE_MONITOR_EVENT_DELETED:
+ if (g_hash_table_lookup_extended (priv->cached_events,
+ file, NULL, &value) &&
+ GPOINTER_TO_UINT (value) == G_FILE_MONITOR_EVENT_CREATED) {
+ /* Consume both the cached CREATED event and this one */
+ g_hash_table_remove (priv->cached_events, file);
+ break;
+ }
+
+ /* In any case, cached events are stale */
+ g_hash_table_remove (priv->cached_events, file);
+
+ /* Fall through */
case G_FILE_MONITOR_EVENT_ATTRIBUTE_CHANGED:
emit_signal_for_event (monitor, event_type,
is_directory, file, NULL);