Commit 105de64c2dba71de2c4c051f2b6ae5541ed0ac5a

Cameron Gutman 2021-06-12T16:19:03

Only queue one wakeup event per wait Queuing more than one can lead to a spurious wakeup on the next wait.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
diff --git a/src/events/SDL_events.c b/src/events/SDL_events.c
index 458d8a8..961d19b 100644
--- a/src/events/SDL_events.c
+++ b/src/events/SDL_events.c
@@ -596,6 +596,9 @@ SDL_SendWakeupEvent()
     if (!_this->wakeup_lock || SDL_LockMutex(_this->wakeup_lock) == 0) {
         if (_this->wakeup_window) {
             _this->SendWakeupEvent(_this, _this->wakeup_window);
+
+            /* No more wakeup events needed until we enter a new wait */
+            _this->wakeup_window = NULL;
         }
         if (_this->wakeup_lock) {
             SDL_UnlockMutex(_this->wakeup_lock);