diff options
author | Carlos Garnacho <carlosg@gnome.org> | 2019-03-04 13:28:12 +0100 |
---|---|---|
committer | Carlos Garnacho <carlosg@gnome.org> | 2019-03-04 13:34:52 +0100 |
commit | 66fc15e91bb2ac18e5bf5a15f1f0ac5d8f4e56bf (patch) | |
tree | 83b584de24d38b6badb77d8b797cfbf7d90fd639 | |
parent | f12117dfcd1f8e61cb7151834e8fe6f688bba232 (diff) | |
download | tracker-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.c | 13 |
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); |