On 04/22/2014 08:22 PM, Neil Roberts wrote:
It looks like this patch makes Weston crash on touch events.
The device_added functions in udev-seat.c and libinput-seat.c try to use
the output list in order to assign the output for the newly created
device. These functions get called via udev_input_init so I guess that
means this function and create_outputs now depend on each other making a
chicken and egg situation. If the device_added function can't find an
output for the new device then it defaults to first output in the list.
However since this patch the output list is now empty at that point so
it ends up with a garbage pointer for the output. When the input code
tries to handle an absolute event (eg, a touch event) then it tries to
get the width and height from the current mode of the output for the
device but this is now garbage. For me with libinput this causes it to
segfault whereas without libinput it gets garbage width and height
values and causes a floating point exception later on.
Yeah, I guess I forgot to test with an unmapped touch screen. I think we
can just leave the device->output set to NULL in that case, and then fix
it when a first output is created. I'll send a patch to do this.
Thanks,
Ander
I haven't looked any further to decide what's the best thing to do.
- Neil
Ander Conselvan de Oliveira <[email protected]> writes:
From: Ander Conselvan de Oliveira <[email protected]>
Commit 58e15865 changed the parameters for udev_get_seat_by_name() to
receive a struct udev_input. However, when this gets called from
create_output_from_connector() during initialization, the input struct
is not yet initialized, leading to a crash. Previously, that function
would take only a pointer to the compositor.
This patch fixes the crash by initializing input before creating any
outputs.
https://bugs.freedesktop.org/show_bug.cgi?id=77503
_______________________________________________
wayland-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/wayland-devel