From f8418d68a6263df7ddf6a10b92752b7dfa0e1f37 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 9 Jul 2019 18:47:21 +0530 Subject: [PATCH] Fully drain the wakeupfd --- glfw/backend_utils.c | 10 +++++++++- kitty/child-monitor.c | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/glfw/backend_utils.c b/glfw/backend_utils.c index 59b84c86b..f1ba80612 100644 --- a/glfw/backend_utils.c +++ b/glfw/backend_utils.c @@ -224,7 +224,15 @@ dispatchTimers(EventLoopData *eld) { static void drain_wakeup_fd(int fd, int events UNUSED, void* data UNUSED) { static char drain_buf[64]; - while(read(fd, drain_buf, sizeof(drain_buf)) < 0 && errno == EINTR); + while(true) { + ssize_t ret = read(fd, drain_buf, sizeof(drain_buf)); + if (ret < 0) { + if (errno == EINTR) continue; + break; + } + if (ret > 0) continue; + break; + } } bool diff --git a/kitty/child-monitor.c b/kitty/child-monitor.c index abccfe7f9..f4f7ef91b 100644 --- a/kitty/child-monitor.c +++ b/kitty/child-monitor.c @@ -1057,9 +1057,9 @@ drain_fd(int fd) { ssize_t len = read(fd, drain_buf, sizeof(drain_buf)); if (len < 0) { if (errno == EINTR) continue; - if (errno != EIO) perror("Call to read() from drain fd failed"); break; } + if (len > 0) continue; break; } }