diff --git a/src/event-loop.c b/src/event-loop.c index d3236016..10466001 100644 --- a/src/event-loop.c +++ b/src/event-loop.c @@ -173,7 +173,7 @@ wl_event_source_timer_dispatch(struct wl_event_source *source, int len; len = read(source->fd, &expires, sizeof expires); - if (len != sizeof expires) + if (!(len == -1 && errno == EAGAIN) && len != sizeof expires) /* Is there anything we can do here? Will this ever happen? */ fprintf(stderr, "timerfd read error: %m\n"); @@ -196,7 +196,8 @@ wl_event_loop_add_timer(struct wl_event_loop *loop, return NULL; source->base.interface = &timer_source_interface; - source->base.fd = timerfd_create(CLOCK_MONOTONIC, TFD_CLOEXEC); + source->base.fd = timerfd_create(CLOCK_MONOTONIC, + TFD_CLOEXEC | TFD_NONBLOCK); source->func = func; return add_source(loop, &source->base, WL_EVENT_READABLE, data);