From 2ec15ebf3fe9e3433ccaee751332ede287c98798 Mon Sep 17 00:00:00 2001 From: Pekka Paalanen Date: Wed, 9 Jun 2021 16:14:45 +0300 Subject: [PATCH] libweston: fix crash on never used output's tear-down weston_output_enable() initializes the list, but weston_output_release() maybe be called even if the output was never enabled, triggering the assert due to uninitialized (actually NULL) list head. This can be triggered with a bad weston.ini, for example using an invalid output transform value. Check in weston_output_disable() instead, but because it too may be called for non-enabled output, only if it was actually enabled. Fixes: 1a4f87dec53dcf2b44af1f935162c2cefcaad3f5 "libweston: introduce weston_paint_node" Signed-off-by: Pekka Paalanen --- libweston/compositor.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/libweston/compositor.c b/libweston/compositor.c index 5ba909f4..3fa1b8d0 100644 --- a/libweston/compositor.c +++ b/libweston/compositor.c @@ -6719,9 +6719,12 @@ weston_output_disable(struct weston_output *output) if (output->disable(output) < 0) return; - if (output->enabled) + if (output->enabled) { weston_compositor_remove_output(output); + assert(wl_list_empty(&output->paint_node_list)); + } + output->destroying = 0; } @@ -6816,8 +6819,6 @@ weston_output_release(struct weston_output *output) if (output->enabled) weston_compositor_remove_output(output); - assert(wl_list_empty(&output->paint_node_list)); - pixman_region32_fini(&output->region); wl_list_remove(&output->link);