Weston under X crashes

John Kåre Alsaker john.kare.alsaker at gmail.com
Tue Oct 23 03:35:32 PDT 2012


I also submitted a patch for this[1], although Kristian argued that it
wouldn't happen in practice. It probably shouldn't trigger if nothing
happened to the outputs. If just moving the cursor around triggers
this, it may be a bug elsewhere.

[1] http://lists.freedesktop.org/archives/wayland-devel/2012-October/005916.html

On Thu, Oct 11, 2012 at 4:14 PM, Niklas Hambüchen <mail at nh2.me> wrote:
> Running src/weston and moving around the weston window with my tiling
> window manager (i3) while moving the mouse sometimes makes it segfault
> for me.
>
> The patch below seems to fix it for me; what breaks is the line
>
>         if (!valid && prev != NULL) {
>                 if (x < prev->x)
>
> in clip_pointer_motion() because none of the
>
>                 if (pixman_region32_contains_point(&output->region,
>                                                    x, y, NULL)) ...
>                 if (pixman_region32_contains_point(&output->region,
>                                                    old_x, old_y, NULL))
>
> actually matches so that prev == NULL.
>
> I don't really know the hidden assumption behind this (no comments, yay
> ;)) - I guess it assumes that either the current or the old x/y are
> within the region, which doesn't seem to be the case for me.
>
> Niklas
>
>
> PS: Once again, I have no clue if the patch is actually the right thing
> to do.
>
> From 9a595282ba798ad388576bcbbc53ab970983c956 Mon Sep 17 00:00:00 2001
> From: =?UTF-8?q?Niklas=20Hamb=C3=BCchen?= <mail at nh2.me>
> Date: Thu, 11 Oct 2012 15:04:57 +0100
> Subject: [PATCH] clip_pointer_motion: Cope for old_x/y not being in the
>  output region either
>
> ---
>  src/compositor.c |    2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/src/compositor.c b/src/compositor.c
> index eac805d..991ecdd 100644
> --- a/src/compositor.c
> +++ b/src/compositor.c
> @@ -1433,7 +1433,7 @@ clip_pointer_motion(struct weston_seat *seat,
> wl_fixed_t *fx, wl_fixed_t *fy)
>                         prev = output;
>         }
>
> -       if (!valid) {
> +       if (!valid && prev != NULL) {
>                 if (x < prev->x)
>                         *fx = wl_fixed_from_int(prev->x);
>                 else if (x >= prev->x + prev->width)
> --
> 1.7.9.5
> _______________________________________________
> 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