[Wayland-bugs] [Bug 103298] infinite loop when lid events are repeated - list item points to itself
bugzilla-daemon at freedesktop.org
bugzilla-daemon at freedesktop.org
Fri Oct 27 19:15:45 UTC 2017
https://bugs.freedesktop.org/show_bug.cgi?id=103298
Alban Browaeys <prahal at yahoo.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Attachment #135132|the version of the patch I |the version of the patch I
description|applied for session2 - |applied for session1 -
|changed to apply against |changed to apply against
|1.8 |1.8
--- Comment #13 from Alban Browaeys <prahal at yahoo.com> ---
Comment on attachment 135132
--> https://bugs.freedesktop.org/attachment.cgi?id=135132
the version of the patch I applied for session1 - changed to apply against 1.8
>Once the lid is closed, the keyboard event listener is set up to open the lid
>for us on keyboard events. With the right sequence, we can trigger the
>listener to be added to the list multiple times, triggering an assert in the
>list test code (or an infinite loop in the 1.8 branch).
>
>Conditions:
>* SW_LID value 1 - sets up the keyboard listener
>* keyboard event - sets lid_is_closed to false
>* SW_LID value 0 - is ignored because we're already open
>* SW_LID value 1 - sets up the keyboard listener again
>
>https://bugs.freedesktop.org/show_bug.cgi?id=103298
>
>Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
>---
> src/evdev-fallback.c | 13 ++++++-------
> test/test-switch.c | 40 +++++++++++++++++++++-------------------
> 2 files changed, 27 insertions(+), 26 deletions(-)
>
>--- a/test/test-lid.c
>+++ b/test/test-lid.c
>@@ -426,26 +426,27 @@
>
> keyboard = litest_add_device(li, LITEST_KEYBOARD);
>
>- litest_lid_action(sw, LIBINPUT_SWITCH_STATE_ON);
>- litest_drain_events(li);
>-
>- litest_event(keyboard, EV_KEY, KEY_A, 1);
>- litest_event(keyboard, EV_SYN, SYN_REPORT, 0);
>- litest_event(keyboard, EV_KEY, KEY_A, 0);
>- litest_event(keyboard, EV_SYN, SYN_REPORT, 0);
>- libinput_dispatch(li);
>-
>- event = libinput_get_event(li);
>- litest_is_switch_event(event,
>- LIBINPUT_SWITCH_LID,
>- LIBINPUT_SWITCH_STATE_OFF);
>-
>- litest_assert_only_typed_events(li, LIBINPUT_EVENT_KEYBOARD_KEY);
>-
>- litest_lid_action(sw, LIBINPUT_SWITCH_STATE_OFF);
>- litest_assert_empty_queue(li);
>-
>- libinput_event_destroy(event);
>+ for (int i = 0; i < 3; i++) {
>+ litest_lid_action(sw, LIBINPUT_SWITCH_STATE_ON);
>+ litest_drain_events(li);
>+
>+ litest_event(keyboard, EV_KEY, KEY_A, 1);
>+ litest_event(keyboard, EV_SYN, SYN_REPORT, 0);
>+ litest_event(keyboard, EV_KEY, KEY_A, 0);
>+ litest_event(keyboard, EV_SYN, SYN_REPORT, 0);
>+ libinput_dispatch(li);
>+
>+ event = libinput_get_event(li);
>+ litest_is_switch_event(event,
>+ LIBINPUT_SWITCH_LID,
>+ LIBINPUT_SWITCH_STATE_OFF);
>+ libinput_event_destroy(event);
>+
>+ litest_assert_only_typed_events(li, LIBINPUT_EVENT_KEYBOARD_KEY);
>+
>+ litest_lid_action(sw, LIBINPUT_SWITCH_STATE_OFF);
>+ litest_assert_empty_queue(li);
>+ }
> litest_delete_device(keyboard);
> }
> END_TEST
>--- a/src/evdev-lid.c
>+++ b/src/evdev-lid.c
>@@ -104,17 +104,16 @@
> if (!dispatch->keyboard.keyboard)
> return;
>
>+ libinput_device_remove_event_listener(&dispatch->keyboard.listener);
>+
> if (is_closed) {
> libinput_device_add_event_listener(
> &dispatch->keyboard.keyboard->base,
> &dispatch->keyboard.listener,
> lid_switch_keyboard_event,
> dispatch);
>- } else {
>- libinput_device_remove_event_listener(
>- &dispatch->keyboard.listener);
>- libinput_device_init_event_listener(
>- &dispatch->keyboard.listener);
>+
>+ libinput_device_init_event_listener(&dispatch->keyboard.listener);
> }
> }
>
>@@ -130,11 +129,12 @@
> case SW_LID:
> is_closed = !!e->value;
>
>- if (dispatch->lid_is_closed == is_closed)
>- return;
> lid_switch_toggle_keyboard_listener(dispatch,
> is_closed);
>
>+ if (dispatch->lid_is_closed == is_closed)
>+ return;
>+
> dispatch->lid_is_closed = is_closed;
>
> lid_switch_notify_toggle(dispatch, device, time);
--
You are receiving this mail because:
You are the assignee for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/wayland-bugs/attachments/20171027/125d2ae2/attachment-0001.html>
More information about the wayland-bugs
mailing list