Fully drain the wakeupfd

This commit is contained in:
Kovid Goyal
2019-07-09 18:47:21 +05:30
parent c0000fb24e
commit f8418d68a6
2 changed files with 10 additions and 2 deletions

10
glfw/backend_utils.c vendored
View File

@@ -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

View File

@@ -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;
}
}