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: 1a4f87dec5
"libweston: introduce weston_paint_node"
Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
This commit is contained in:
@@ -6719,9 +6719,12 @@ weston_output_disable(struct weston_output *output)
|
|||||||
if (output->disable(output) < 0)
|
if (output->disable(output) < 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (output->enabled)
|
if (output->enabled) {
|
||||||
weston_compositor_remove_output(output);
|
weston_compositor_remove_output(output);
|
||||||
|
|
||||||
|
assert(wl_list_empty(&output->paint_node_list));
|
||||||
|
}
|
||||||
|
|
||||||
output->destroying = 0;
|
output->destroying = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -6816,8 +6819,6 @@ weston_output_release(struct weston_output *output)
|
|||||||
if (output->enabled)
|
if (output->enabled)
|
||||||
weston_compositor_remove_output(output);
|
weston_compositor_remove_output(output);
|
||||||
|
|
||||||
assert(wl_list_empty(&output->paint_node_list));
|
|
||||||
|
|
||||||
pixman_region32_fini(&output->region);
|
pixman_region32_fini(&output->region);
|
||||||
wl_list_remove(&output->link);
|
wl_list_remove(&output->link);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user