wayland: Drop cairo surfaces when withdrawing
If a surface is unmapped by the client while gdk is processing updates, (for example Firefox un-mapping its window on Expose events), the windowing backend resources might be lost (for example with Wayland) which can cause a crash in end_paint(). Make sure we drop the cairo surfaces as well when hiding the surface, that will avoid the crash in gdk_surface_impl_wayland_end_paint() when trying to attach the staging cairo surface to a released wl_surface, these will be recreated when needed when the surface becomes visible again and there is no need to keep such buffers around for a surface which is not visible anyway. https://bugzilla.gnome.org/show_bug.cgi?id=793062
This commit is contained in:
@@ -2530,6 +2530,7 @@ gdk_wayland_surface_hide_surface (GdkSurface *surface)
|
||||
unset_transient_for_exported (surface);
|
||||
|
||||
_gdk_wayland_surface_clear_saved_size (surface);
|
||||
drop_cairo_surfaces (surface);
|
||||
impl->pending_commit = FALSE;
|
||||
impl->mapped = FALSE;
|
||||
}
|
||||
@@ -2813,7 +2814,6 @@ gdk_wayland_surface_destroy (GdkSurface *surface,
|
||||
g_return_if_fail (!foreign_destroy);
|
||||
|
||||
gdk_wayland_surface_hide_surface (surface);
|
||||
drop_cairo_surfaces (surface);
|
||||
|
||||
if (surface->parent == NULL)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user