timerfd: read() returns -1 with errno == EAGAIN, not 0

When there hasn't been a timeout (or in our case, there was a timeout,
but we reset the timer before we got to the read()), read() returns,
not 0, but -1 with errno == EAGAIN.
This commit is contained in:
Daniel Eklöf 2019-11-02 01:44:01 +01:00
parent 6ed97a47be
commit f28fb6c039
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
2 changed files with 12 additions and 20 deletions

View file

@ -407,15 +407,13 @@ fdm_repeat(struct fdm *fdm, int fd, int events, void *data)
wayl->kbd.repeat.fd, &expiration_count, sizeof(expiration_count));
if (ret < 0) {
if (errno == EAGAIN)
return true;
LOG_ERRNO("failed to read repeat key from repeat timer fd");
return false;
}
if (ret == 0) {
/* Cancelled by other handler in *this* epoll() iteration */
return true;
}
wayl->kbd.repeat.dont_re_repeat = true;
for (size_t i = 0; i < expiration_count; i++)
input_repeat(wayl, wayl->kbd.repeat.key);