From e1e2352dcc157fd0bd7c880379ba42b9e5d9be75 Mon Sep 17 00:00:00 2001 From: Ander Conselvan de Oliveira Date: Fri, 13 Dec 2013 22:10:55 +0200 Subject: [PATCH] compositor: Don't repaint outputs being destroyed Set a flag when an output is being destroyed and use that to avoid repainting. This allows functions that schedule an output repaint to be called when the output is being destroyed without causing the compositor to crash. --- src/compositor.c | 5 +++++ src/compositor.h | 1 + 2 files changed, 6 insertions(+) diff --git a/src/compositor.c b/src/compositor.c index e4eb56dcb..ed6548c63 100644 --- a/src/compositor.c +++ b/src/compositor.c @@ -1759,6 +1759,9 @@ weston_output_repaint(struct weston_output *output, uint32_t msecs) pixman_region32_t output_damage; int r; + if (output->destroying) + return 0; + /* Rebuild the surface list and update surface transforms up front. */ weston_compositor_build_view_list(ec); @@ -3105,6 +3108,8 @@ weston_compositor_remove_output(struct weston_compositor *compositor, WL_EXPORT void weston_output_destroy(struct weston_output *output) { + output->destroying = 1; + weston_compositor_remove_output(output->compositor, output); wl_list_remove(&output->link); diff --git a/src/compositor.h b/src/compositor.h index 84b0f79f9..901366fb2 100644 --- a/src/compositor.h +++ b/src/compositor.h @@ -198,6 +198,7 @@ struct weston_output { int move_x, move_y; uint32_t frame_time; int disable_planes; + int destroying; char *make, *model, *serial_number; uint32_t subpixel;