[PATCH weston] compositor-x11: Fix some shutdown crashes
Bryce Harrington
bryce at osg.samsung.com
Thu Dec 11 12:25:22 PST 2014
On Thu, Dec 11, 2014 at 01:40:11PM -0600, Derek Foreman wrote:
> The assertion in x11_compositor_find_output() can trigger during normal
> shutdown, for example, when moving the mouse while hitting a hotkey to
> close the weston window.
>
> Instead we can remove the assert(), return NULL, and discard events
> we can't find a destination output for.
LGTM.
Reviewed-by: Bryce Harrington <bryce at osg.samsung.com>
> Signed-off-by: Derek Foreman <derekf at osg.samsung.com>
> ---
> src/compositor-x11.c | 13 ++++++++++++-
> 1 file changed, 12 insertions(+), 1 deletion(-)
>
> diff --git a/src/compositor-x11.c b/src/compositor-x11.c
> index a760f33..566df12 100644
> --- a/src/compositor-x11.c
> +++ b/src/compositor-x11.c
> @@ -920,7 +920,7 @@ x11_compositor_find_output(struct x11_compositor *c, xcb_window_t window)
> return output;
> }
>
> - assert(0);
> + return NULL;
> }
>
> static void
> @@ -992,6 +992,8 @@ x11_compositor_deliver_button_event(struct x11_compositor *c,
> struct x11_output *output;
>
> output = x11_compositor_find_output(c, button_event->event);
> + if (!output)
> + return;
>
> if (state)
> xcb_grab_pointer(c->conn, 0, output->window,
> @@ -1070,6 +1072,9 @@ x11_compositor_deliver_motion_event(struct x11_compositor *c,
> if (!c->has_xkb)
> update_xkb_state_from_core(c, motion_notify->state);
> output = x11_compositor_find_output(c, motion_notify->event);
> + if (!output)
> + return;
> +
> weston_output_transform_coordinate(&output->base,
> wl_fixed_from_int(motion_notify->event_x),
> wl_fixed_from_int(motion_notify->event_y),
> @@ -1096,6 +1101,9 @@ x11_compositor_deliver_enter_event(struct x11_compositor *c,
> if (!c->has_xkb)
> update_xkb_state_from_core(c, enter_notify->state);
> output = x11_compositor_find_output(c, enter_notify->event);
> + if (!output)
> + return;
> +
> weston_output_transform_coordinate(&output->base,
> wl_fixed_from_int(enter_notify->event_x),
> wl_fixed_from_int(enter_notify->event_y), &x, &y);
> @@ -1245,6 +1253,9 @@ x11_compositor_handle_event(int fd, uint32_t mask, void *data)
> case XCB_EXPOSE:
> expose = (xcb_expose_event_t *) event;
> output = x11_compositor_find_output(c, expose->window);
> + if (!output)
> + break;
> +
> weston_output_damage(&output->base);
> weston_output_schedule_repaint(&output->base);
> break;
> --
> 2.1.3
>
> _______________________________________________
> wayland-devel mailing list
> wayland-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel
More information about the wayland-devel
mailing list