From 2f2a70cc8533d6e9f7fca9f6a9d598411c23e700 Mon Sep 17 00:00:00 2001 From: Giulio Camuffo Date: Sun, 12 Jul 2015 10:52:32 +0300 Subject: [PATCH] compositor: make sure to reset views' pointers to destroyed output MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When an output is being destroyed reassign the output of the views that were in it, to be sure not to keep a dangling pointer which could be used later on by calling weston_surface_assign_output() on the view's surface. Also make sure we send wl_surface.leave events to the surfaces that were in that output. Reviewed-by: Jonas Ã…dahl --- src/compositor.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/compositor.c b/src/compositor.c index 150d1fb1..2a117d80 100644 --- a/src/compositor.c +++ b/src/compositor.c @@ -1079,6 +1079,9 @@ weston_view_assign_output(struct weston_view *ev) mask = 0; pixman_region32_init(®ion); wl_list_for_each(output, &ec->output_list, link) { + if (output->destroying) + continue; + pixman_region32_intersect(®ion, &ev->transform.boundingbox, &output->region); @@ -3888,9 +3891,15 @@ WL_EXPORT void weston_output_destroy(struct weston_output *output) { struct wl_resource *resource; + struct weston_view *view; output->destroying = 1; + wl_list_for_each(view, &output->compositor->view_list, link) { + if (view->output_mask & (1 << output->id)) + weston_view_assign_output(view); + } + wl_event_source_remove(output->repaint_timer); weston_presentation_feedback_discard_list(&output->feedback_list);