From 2324b96a325532ba05d5eeb388e9d8f4aeef2a7f Mon Sep 17 00:00:00 2001 From: Olivier Fourdan Date: Wed, 2 Nov 2016 11:51:54 +0100 Subject: [PATCH] wayland: check valid pending cairo surface gdk_wayland_window_attach_image() is normally called from gdk_window_end_paint() to notify the compositor of newly staged drawing. If any of the drawing code inadvertently dispatches the wayland event loop (for instance with a gdk_flush() call), then it's possible that by the time gdk_window_end_paint() is called, the staged drawing is already destroyed. This commit bypasses the attach_image call in scenarios where the staged drawing is prematurely dropped. https://bugzilla.gnome.org/show_bug.cgi?id=773274 --- gdk/wayland/gdkwindow-wayland.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/gdk/wayland/gdkwindow-wayland.c b/gdk/wayland/gdkwindow-wayland.c index 41672fb656..c6c52a71b9 100644 --- a/gdk/wayland/gdkwindow-wayland.c +++ b/gdk/wayland/gdkwindow-wayland.c @@ -896,7 +896,9 @@ gdk_window_impl_wayland_end_paint (GdkWindow *window) cairo_rectangle_int_t rect; int i, n; - if (!window->current_paint.use_gl && + if (impl->staging_cairo_surface && + _gdk_wayland_is_shm_surface (impl->staging_cairo_surface) && + !window->current_paint.use_gl && !cairo_region_is_empty (window->current_paint.region)) { gdk_wayland_window_attach_image (window);