From 6aabd8c1faae3cd4310e7953708150736c1de804 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Mon, 20 May 2013 23:04:25 -0700 Subject: [PATCH] Fixed bug 1113 - SDL_SetEventFilter()'s event deletion process is not safe against intervening event push. This is not completely thread-safe since it's possible for an event to come in and be unfiltered between the flush call and the setting of the new filter, but it's much better than it was. --- src/events/SDL_events.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/events/SDL_events.c b/src/events/SDL_events.c index f27c3cb85..047a07d7a 100644 --- a/src/events/SDL_events.c +++ b/src/events/SDL_events.c @@ -388,12 +388,11 @@ SDL_PushEvent(SDL_Event * event) void SDL_SetEventFilter(SDL_EventFilter filter, void *userdata) { - SDL_Event bitbucket; - /* Set filter and discard pending events */ - SDL_EventOK = filter; + SDL_EventOK = NULL; + SDL_FlushEvents(SDL_FIRSTEVENT, SDL_LASTEVENT); SDL_EventOKParam = userdata; - while (SDL_PollEvent(&bitbucket) > 0); + SDL_EventOK = filter; } SDL_bool