Commit 954858846d2883864b4e5fef55f31bb92f1514cc

Sam Lantinga 2022-01-06T13:58:39

Move special sentinel handling inside SDL_PeepEvents()

diff --git a/src/events/SDL_events.c b/src/events/SDL_events.c
index f5ead49..4459896 100644
--- a/src/events/SDL_events.c
+++ b/src/events/SDL_events.c
@@ -721,9 +721,14 @@ SDL_PeepEventsInternal(SDL_Event * events, int numevents, SDL_eventaction action
                             SDL_CutEvent(entry);
                         }
                     }
-                    if (type != SDL_POLLSENTINEL || include_sentinel) {
-                        ++used;
+                    if (type == SDL_POLLSENTINEL) {
+                        /* Special handling for the sentinel event */
+                        if (!include_sentinel || SDL_AtomicGet(&SDL_sentinel_pending) > 0) {
+                            /* Skip it, we don't want to include it or there's another one pending */
+                            continue;
+                        }
                     }
+                    ++used;
                 }
             }
         }
@@ -983,7 +988,6 @@ SDL_WaitEventTimeout(SDL_Event * event, int timeout)
     }
 
     /* First check for existing events */
-retry:
     switch (SDL_PeepEventsInternal(event, 1, SDL_GETEVENT, SDL_FIRSTEVENT, SDL_LASTEVENT, include_sentinel)) {
     case -1:
         return 0;
@@ -996,10 +1000,6 @@ retry:
     default:
         if (event && event->type == SDL_POLLSENTINEL) {
             /* Reached the end of a poll cycle, and not willing to wait */
-            if (SDL_AtomicGet(&SDL_sentinel_pending) > 0) {
-                /* We have another sentinel pending, skip this and keep going */
-                goto retry;
-            }
             return 0;
         }
         /* Has existing events */