eloop: make timerfd non-blocking
authorDavid Herrmann <dh.herrmann@googlemail.com>
Thu, 27 Sep 2012 12:29:33 +0000 (14:29 +0200)
committerDavid Herrmann <dh.herrmann@googlemail.com>
Thu, 27 Sep 2012 12:29:33 +0000 (14:29 +0200)
We actually allow draining a timer so we cannot be sure that a timer has
valid data that we can read. We already handle the non-blocking case
everywhere, we just missed setting this flag.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
src/eloop.c

index 1bf9ff7..c83dcb4 100644 (file)
@@ -1540,7 +1540,7 @@ int ev_timer_new(struct ev_timer **out, const struct itimerspec *spec,
        timer->cb = cb;
        timer->data = data;
 
-       timer->fd = timerfd_create(CLOCK_MONOTONIC, TFD_CLOEXEC);
+       timer->fd = timerfd_create(CLOCK_MONOTONIC, TFD_CLOEXEC | TFD_NONBLOCK);
        if (timer->fd < 0) {
                llog_error(timer, "cannot create timerfd (%d): %m", errno);
                ret = -EFAULT;