From 384ba4d30d4a77751a8068d9aebaaee2c02cf10c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Fri, 4 Dec 2020 18:36:53 +0100 Subject: [PATCH] fdm: do *not* keep polling on EINTR MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This fixes an issue where foot --server did not exit on SIGINT. This happened because we never returned out from fdm_poll(), and thus we never saw ‘aborted’ being set. --- fdm.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/fdm.c b/fdm.c index e8b96cf7..39a72f5b 100644 --- a/fdm.c +++ b/fdm.c @@ -324,12 +324,11 @@ fdm_poll(struct fdm *fdm) struct epoll_event events[tll_length(fdm->fds)]; - int r; - do { - r = epoll_wait(fdm->epoll_fd, events, tll_length(fdm->fds), -1); - } while (unlikely(r < 0 && errno == EINTR)); + int r = epoll_wait(fdm->epoll_fd, events, tll_length(fdm->fds), -1); + if (unlikely(r < 0)) { + if (errno == EINTR) + return true; - if (r < 0) { LOG_ERRNO("failed to epoll"); return false; }