From 31853ee20c97b03fd9cd74d86f78bca8f507b620 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 13 Jul 2018 10:33:18 +0530 Subject: [PATCH] Handle errno better when polling for events --- glfw/backend_utils.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/glfw/backend_utils.c b/glfw/backend_utils.c index b005ee080..56e075f4d 100644 --- a/glfw/backend_utils.c +++ b/glfw/backend_utils.c @@ -222,7 +222,9 @@ pollForEvents(EventLoopData *eld, double timeout) { while(1) { if (timeout >= 0) { + errno = 0; result = pollWithTimeout(eld->fds, eld->watches_count, timeout); + int saved_errno = errno; dispatchTimers(eld); if (result > 0) { dispatchEvents(eld); @@ -231,16 +233,18 @@ pollForEvents(EventLoopData *eld, double timeout) { } timeout = end_time - monotonic(); if (timeout <= 0) break; - if (result < 0 && (errno == EINTR || errno == EAGAIN)) continue; + if (result < 0 && (saved_errno == EINTR || saved_errno == EAGAIN)) continue; break; } else { + errno = 0; result = poll(eld->fds, eld->watches_count, -1); + int saved_errno = errno; dispatchTimers(eld); if (result > 0) { dispatchEvents(eld); read_ok = eld->watches[0].ready; } - if (result < 0 && (errno == EINTR || errno == EAGAIN)) continue; + if (result < 0 && (saved_errno == EINTR || saved_errno == EAGAIN)) continue; break; } }