From de11dd3d60232e6418ec4ad08efcc945436c4e69 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Tue, 4 Mar 2025 10:22:20 -0800 Subject: [PATCH] Make SDL_RegisterEvents() thread-safe Fixes https://github.com/libsdl-org/SDL/issues/12457 (cherry picked from commit 82552e5b7cbad8942bb80d371e08618a4ebd5531) --- src/events/SDL_events.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/events/SDL_events.c b/src/events/SDL_events.c index 157f018006..349d575015 100644 --- a/src/events/SDL_events.c +++ b/src/events/SDL_events.c @@ -110,7 +110,7 @@ typedef struct } SDL_DisabledEventBlock; static SDL_DisabledEventBlock *SDL_disabled_events[256]; -static Uint32 SDL_userevents = SDL_EVENT_USER; +static SDL_AtomicInt SDL_userevents; typedef struct SDL_TemporaryMemory { @@ -1893,9 +1893,11 @@ Uint32 SDL_RegisterEvents(int numevents) { Uint32 event_base = 0; - if ((numevents > 0) && (SDL_userevents + numevents <= SDL_EVENT_LAST)) { - event_base = SDL_userevents; - SDL_userevents += numevents; + if (numevents > 0) { + int value = SDL_AddAtomicInt(&SDL_userevents, numevents); + if (value >= 0 && value <= (SDL_EVENT_LAST - SDL_EVENT_USER)) { + event_base = (Uint32)(SDL_EVENT_USER + value); + } } return event_base; }