Commit 81d3adddbfd333266d5b88438bc5b1baea0f823e

Cameron Gutman 2022-06-11T12:59:33

events: Fix spurious early returns from SDL_WaitEvent()/SDL_WaitEventTimeout() Fixes #5780

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
diff --git a/src/events/SDL_events.c b/src/events/SDL_events.c
index 962120d..4f52d10 100644
--- a/src/events/SDL_events.c
+++ b/src/events/SDL_events.c
@@ -973,7 +973,10 @@ SDL_WaitEventTimeout_Device(_THIS, SDL_Window *wakeup_window, SDL_Event * event,
             status = _this->WaitEventTimeout(_this, loop_timeout);
             /* Set wakeup_window to NULL without holding the lock. */
             _this->wakeup_window = NULL;
-            if (status <= 0) {
+            if (status == 0 && need_periodic_poll && loop_timeout == PERIODIC_POLL_INTERVAL_MS) {
+                /* We may have woken up to poll. Try again */
+                continue;
+            } else if (status <= 0) {
                 /* There is either an error or the timeout is elapsed: return */
                 return status;
             }