mirror of
https://gitlab.freedesktop.org/libinput/libinput.git
synced 2025-12-20 04:30:06 +01:00
timer: set O_NONBLOCK on the timerfd
Resetting a timerfd empties the data on the fd, so if the timer is reset between triggering and us reading it, we may block trying to read it. Since we read events off a device in a loop, a device sending a continuous flow of events may cause the timer to trigger but delay reading it. If one of the events cause e.g. the tap timer to be set, the timerfd may be empty at the time of reading. Suggested-by: Derek Foreman <derekf@osg.samsung.com> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
28ed7a6265
commit
c2ef1854d8
1 changed files with 2 additions and 1 deletions
|
|
@ -122,7 +122,8 @@ libinput_timer_handler(void *data)
|
|||
int
|
||||
libinput_timer_subsys_init(struct libinput *libinput)
|
||||
{
|
||||
libinput->timer.fd = timerfd_create(CLOCK_MONOTONIC, TFD_CLOEXEC);
|
||||
libinput->timer.fd = timerfd_create(CLOCK_MONOTONIC,
|
||||
TFD_CLOEXEC | TFD_NONBLOCK);
|
||||
if (libinput->timer.fd < 0)
|
||||
return -1;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue