Move special sentinel handling inside SDL_PeepEvents()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
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 */