From ac9df3aac5dfabfcb23b1f70dc152506f5565fd3 Mon Sep 17 00:00:00 2001 From: David Herrmann Date: Sun, 25 Mar 2012 16:45:39 +0200 Subject: [PATCH] eloop: catch EINTR in epoll_wait() epoll_wait() returns EINTR even if using SA_RESTART for signals. Therefore, catch EINTR and set count to zero. Signed-off-by: David Herrmann --- src/eloop.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/eloop.c b/src/eloop.c index d3c4776..0267175 100644 --- a/src/eloop.c +++ b/src/eloop.c @@ -774,8 +774,12 @@ int ev_eloop_dispatch(struct ev_eloop *loop, int timeout) /* dispatch fd events */ count = epoll_wait(loop->efd, ep, 32, timeout); if (count < 0) { - log_warn("epoll_wait dispatching failed: %m"); - return -errno; + if (errno == EINTR) { + count = 0; + } else { + log_warn("epoll_wait dispatching failed: %m"); + return -errno; + } } loop->cur_fds = ep; -- 2.7.4