Wayland: Continue poll() if timerfd can’t be read

In the case the key repeat timerfd was interrupted before read(), the
cursor timerfd wasn’t read at all even when it could.

Related to #1711

(cherry picked from commit 68879081cb)
This commit is contained in:
Emmanuel Gil Peyrot 2021-12-14 09:29:01 +01:00 committed by Camilla Löwy
parent 8f3677a0d4
commit 52133a3690
2 changed files with 4 additions and 9 deletions

View File

@ -123,7 +123,7 @@ information on what to include when reporting a bug.
## Changelog ## Changelog
There is nothing here yet. - [Wayland] Bugfix: Key repeat could lead to a race condition (#1710)
## Contact ## Contact

View File

@ -867,10 +867,7 @@ static void handleEvents(int timeout)
if (fds[1].revents & POLLIN) if (fds[1].revents & POLLIN)
{ {
read_ret = read(_glfw.wl.timerfd, &repeats, sizeof(repeats)); read_ret = read(_glfw.wl.timerfd, &repeats, sizeof(repeats));
if (read_ret != 8) if (read_ret == 8 && _glfw.wl.keyboardFocus)
return;
if (_glfw.wl.keyboardFocus)
{ {
for (i = 0; i < repeats; ++i) for (i = 0; i < repeats; ++i)
{ {
@ -886,9 +883,7 @@ static void handleEvents(int timeout)
if (fds[2].revents & POLLIN) if (fds[2].revents & POLLIN)
{ {
read_ret = read(_glfw.wl.cursorTimerfd, &repeats, sizeof(repeats)); read_ret = read(_glfw.wl.cursorTimerfd, &repeats, sizeof(repeats));
if (read_ret != 8) if (read_ret == 8)
return;
incrementCursorImage(_glfw.wl.pointerFocus); incrementCursorImage(_glfw.wl.pointerFocus);
} }
} }