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;