From c477768e6f926c38d4cdc236cab8376faf9f6789 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Thu, 6 Jan 2022 18:58:30 -0800 Subject: [PATCH] We only need to add the sentinel at the top of SDL_WaitEventTimeout() --- src/events/SDL_events.c | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/src/events/SDL_events.c b/src/events/SDL_events.c index ff079c50e..7bd982a7a 100644 --- a/src/events/SDL_events.c +++ b/src/events/SDL_events.c @@ -809,7 +809,7 @@ SDL_FlushEvents(Uint32 minType, Uint32 maxType) /* Run the system dependent event loops */ void -SDL_PumpEventsInternal(SDL_bool push_sentinel) +SDL_PumpEvents() { SDL_VideoDevice *_this = SDL_GetVideoDevice(); @@ -836,20 +836,6 @@ SDL_PumpEventsInternal(SDL_bool push_sentinel) #endif SDL_SendPendingSignalEvents(); /* in case we had a signal handler fire, etc. */ - - if (push_sentinel && SDL_GetEventState(SDL_POLLSENTINEL) == SDL_ENABLE) { - SDL_Event sentinel; - - SDL_zero(sentinel); - sentinel.type = SDL_POLLSENTINEL; - SDL_PushEvent(&sentinel); - } -} - -void -SDL_PumpEvents() -{ - SDL_PumpEventsInternal(SDL_FALSE); } /* Public functions */ @@ -891,7 +877,7 @@ SDL_WaitEventTimeout_Device(_THIS, SDL_Window *wakeup_window, SDL_Event * event, c) Periodic processing that takes place in some platform PumpEvents() functions happens d) Signals received in WaitEventTimeout() are turned into SDL events */ - SDL_PumpEventsInternal(SDL_TRUE); + SDL_PumpEvents(); if (!_this->wakeup_lock || SDL_LockMutex(_this->wakeup_lock) == 0) { int status = SDL_PeepEvents(event, 1, SDL_GETEVENT, SDL_FIRSTEVENT, SDL_LASTEVENT); @@ -990,7 +976,15 @@ SDL_WaitEventTimeout(SDL_Event * event, int timeout) /* If there isn't a poll sentinel event pending, pump events and add one */ if (SDL_AtomicGet(&SDL_sentinel_pending) == 0) { - SDL_PumpEventsInternal(SDL_TRUE); + SDL_PumpEvents(); + + if (SDL_GetEventState(SDL_POLLSENTINEL) == SDL_ENABLE) { + SDL_Event sentinel; + + SDL_zero(sentinel); + sentinel.type = SDL_POLLSENTINEL; + SDL_PushEvent(&sentinel); + } } /* First check for existing events */ @@ -1037,7 +1031,7 @@ SDL_WaitEventTimeout(SDL_Event * event, int timeout) } for (;;) { - SDL_PumpEventsInternal(SDL_TRUE); + SDL_PumpEvents(); switch (SDL_PeepEvents(event, 1, SDL_GETEVENT, SDL_FIRSTEVENT, SDL_LASTEVENT)) { case -1: return 0;