Couple of fixes for GtkDisplay open/close
As part of gnome-shell!941 (merged) to fix gnome-shell#2139 (closed) and be able to run
gnome-shell-perf-helper independently of
gnome-shell even on Wayland (where
gnome-shell is the display server), I noticed that opening and closing
GdkDisplay several times could lead to a crash.
This is because, since commit 360a3c16, GTK caches the settings per display in a static
GArray, keeping a reference to the GdkDisplay`.
However, when closing the display, the corresponding entry is not removed from the cache in
So when reopening again a
GdkDisplay, if the new address matches one of the previously closed display, the cache will return the existing
GtkSettings from the cache, which still holds a reference to the old
GdkScreen which was freed along the
To avoid the issue, make sure to remove the
GdkDisplay and corresponding
GdkSettings when closing the
Also, care must be taken not to recreate the
GdkSettings and re-add the
GdkDisplay to the cache once the display is closed, and make sure callers of
gtk_settings_get_for_display() can deal with a returned value being
NULL if the display is closed.
This MR is to fix this crash and also fix a warning caused by a wrong type casting in