Fix Wayland client crash unmapping a window while gdk is processing

This commit is contained in:
Simon McVittie
2018-04-03 08:26:28 +01:00
parent f5658275ae
commit 735441249e
3 changed files with 46 additions and 0 deletions

3
debian/changelog vendored
View File

@ -1,6 +1,9 @@
gtk+3.0 (3.22.29-3) UNRELEASED; urgency=medium
* Allow stderr in autopkgtests. They produce harmless diagnostics.
* d/p/0013-wayland-Drop-cairo-surfaces-when-withdrawing.patch:
Add patch from upstream fixing a Wayland client crash if it unmaps
a window while gdk is processing updates
-- Simon McVittie <smcv@debian.org> Thu, 22 Mar 2018 15:47:57 +0000

View File

@ -0,0 +1,42 @@
From: Olivier Fourdan <ofourdan@redhat.com>
Date: Tue, 30 Jan 2018 13:57:35 +0100
Subject: wayland: Drop cairo surfaces when withdrawing
If a window 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_window_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.
Bug: https://bugzilla.gnome.org/show_bug.cgi?id=793062
Origin: upstream, 3.22.30, commit:3bd7b379c8d2c7e57ce22501420791c4bfcf24ca
---
gdk/wayland/gdkwindow-wayland.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/gdk/wayland/gdkwindow-wayland.c b/gdk/wayland/gdkwindow-wayland.c
index 9ee4fe2..38c23c2 100644
--- a/gdk/wayland/gdkwindow-wayland.c
+++ b/gdk/wayland/gdkwindow-wayland.c
@@ -2600,6 +2600,7 @@ gdk_wayland_window_hide_surface (GdkWindow *window)
unset_transient_for_exported (window);
_gdk_wayland_window_clear_saved_size (window);
+ drop_cairo_surfaces (window);
impl->pending_commit = FALSE;
impl->mapped = FALSE;
}
@@ -2916,7 +2917,6 @@ gdk_wayland_window_destroy (GdkWindow *window,
g_return_if_fail (!foreign_destroy);
gdk_wayland_window_hide_surface (window);
- drop_cairo_surfaces (window);
}
static void

View File

@ -10,3 +10,4 @@ gdk-x11-Check-if-we-have-access-to-GL-before-using-G.patch
0010-imwayland-Avoid-TOGGLE_INPUT_PANEL-requests-if-there.patch
0011-gtkstylecontext-guard-against-gtk_css_widget_node_ge.patch
0012-widget-Only-print-allocation-warnings-with-enable-de.patch
0013-wayland-Drop-cairo-surfaces-when-withdrawing.patch