aboutsummarylogtreecommitdiffstats
path: root/0002-Wayland-Continue-poll-if-timerfd-can-t-be-read.patch
diff options
context:
space:
mode:
Diffstat (limited to '0002-Wayland-Continue-poll-if-timerfd-can-t-be-read.patch')
-rw-r--r--0002-Wayland-Continue-poll-if-timerfd-can-t-be-read.patch46
1 files changed, 46 insertions, 0 deletions
diff --git a/0002-Wayland-Continue-poll-if-timerfd-can-t-be-read.patch b/0002-Wayland-Continue-poll-if-timerfd-can-t-be-read.patch
new file mode 100644
index 000000000000..f72f2dfb16c0
--- /dev/null
+++ b/0002-Wayland-Continue-poll-if-timerfd-can-t-be-read.patch
@@ -0,0 +1,46 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
+Date: Tue, 14 Dec 2021 09:29:01 +0100
+Subject: =?UTF-8?q?Wayland:=20Continue=20poll()=20if=20timerfd=20can?=
+ =?UTF-8?q?=E2=80=99t=20be=20read?=
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+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
+---
+ src/wl_window.c | 11 +++--------
+ 1 file changed, 3 insertions(+), 8 deletions(-)
+
+diff --git a/src/wl_window.c b/src/wl_window.c
+index db32f449..ec4e60cd 100644
+--- a/src/wl_window.c
++++ b/src/wl_window.c
+@@ -867,10 +867,7 @@ static void handleEvents(int timeout)
+ if (fds[1].revents & POLLIN)
+ {
+ read_ret = read(_glfw.wl.timerfd, &repeats, sizeof(repeats));
+- if (read_ret != 8)
+- return;
+-
+- if (_glfw.wl.keyboardFocus)
++ if (read_ret == 8 && _glfw.wl.keyboardFocus)
+ {
+ for (i = 0; i < repeats; ++i)
+ {
+@@ -886,10 +883,8 @@ static void handleEvents(int timeout)
+ if (fds[2].revents & POLLIN)
+ {
+ read_ret = read(_glfw.wl.cursorTimerfd, &repeats, sizeof(repeats));
+- if (read_ret != 8)
+- return;
+-
+- incrementCursorImage(_glfw.wl.pointerFocus);
++ if (read_ret == 8)
++ incrementCursorImage(_glfw.wl.pointerFocus);
+ }
+ }
+ else