summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCosimo Cecchi <cosimo@endlessm.com>2018-11-09 13:55:53 -0800
committerFlorian Müllner <fmuellner@gnome.org>2018-11-10 00:42:49 +0100
commitca3f4cfb41851fec84a68fc334bef2e3e9a552bc (patch)
tree975a19abcaeafd65d551c5e5bf9c5f0cf84f7d37
parent551e827841626cd8084daa2210b3bf60e5be96be (diff)
downloadgnome-shell-ca3f4cfb41851fec84a68fc334bef2e3e9a552bc.tar.gz
StTextureCache: use right event to detect file changes
StTextureCache installs file monitors that invalidate caches when contents of the underlying file change. At the moment, the cache uses the Gio.FileMonitorEvent.CHANGED event type to make that determination. However, that is suboptimal for at least two reasons: - while a file is being written to disk, many CHANGED events will be emitted in sequence. That will cause needless cache invalidations, and we will risk loading the file before it's fully loaded. - if an existing file is replaced, e.g. with g_file_replace(), we may not get a CHANGED event but a CREATED one instead, so the cache ends up never getting invalidated. The good news is that in both of those cases GFileMonitor will send a CHANGES_DONE_HINT event after changes have settled, or after the file is replaced. This commit fixes both cases by switching from the CHANGED event to CHANGES_DONE_HINT to determine that a file has in fact changed. https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/286
-rw-r--r--src/st/st-texture-cache.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/st/st-texture-cache.c b/src/st/st-texture-cache.c
index 3bf3a5e97..621907111 100644
--- a/src/st/st-texture-cache.c
+++ b/src/st/st-texture-cache.c
@@ -984,7 +984,7 @@ file_changed_cb (GFileMonitor *monitor,
char *key;
guint file_hash;
- if (event_type != G_FILE_MONITOR_EVENT_CHANGED)
+ if (event_type != G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT)
return;
file_hash = g_file_hash (file);