Fully drain the wakeupfd
This commit is contained in:
10
glfw/backend_utils.c
vendored
10
glfw/backend_utils.c
vendored
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user