From 9bea6169bf98dbd0b63e27c6b53efe00fe6a09de Mon Sep 17 00:00:00 2001 From: Josh Tynjala Date: Fri, 3 Oct 2025 14:54:19 -0700 Subject: [PATCH] SDLApplication: fix crash in SDL_Quit on Windows by calling SDL_QuitSubSystem first with the same flags passed to SDL_Init (closes #1934) As far as I can tell, SDL_QuitSubSystem is not required, and SDL_Quit should automatically quit each subsystem. However, this stops the crash, so maybe there's some kind of race condition that this avoids. --- project/src/backend/sdl/SDLApplication.cpp | 4 +++- project/src/backend/sdl/SDLApplication.h | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/project/src/backend/sdl/SDLApplication.cpp b/project/src/backend/sdl/SDLApplication.cpp index 6d355ba8e..08b7f5d78 100644 --- a/project/src/backend/sdl/SDLApplication.cpp +++ b/project/src/backend/sdl/SDLApplication.cpp @@ -25,7 +25,7 @@ namespace lime { SDLApplication::SDLApplication () { - Uint32 initFlags = SDL_INIT_VIDEO | SDL_INIT_GAMECONTROLLER | SDL_INIT_TIMER | SDL_INIT_JOYSTICK; + initFlags = SDL_INIT_VIDEO | SDL_INIT_GAMECONTROLLER | SDL_INIT_TIMER | SDL_INIT_JOYSTICK; #if defined(LIME_MOJOAL) || defined(LIME_OPENALSOFT) initFlags |= SDL_INIT_AUDIO; #endif @@ -814,6 +814,8 @@ namespace lime { applicationEvent.type = EXIT; ApplicationEvent::Dispatch (&applicationEvent); + SDL_QuitSubSystem (initFlags); + SDL_Quit (); return 0; diff --git a/project/src/backend/sdl/SDLApplication.h b/project/src/backend/sdl/SDLApplication.h index 1ac1fdf74..679de5e93 100644 --- a/project/src/backend/sdl/SDLApplication.h +++ b/project/src/backend/sdl/SDLApplication.h @@ -63,6 +63,7 @@ namespace lime { ClipboardEvent clipboardEvent; Uint32 currentUpdate; double framePeriod; + Uint32 initFlags; DropEvent dropEvent; GamepadEvent gamepadEvent; JoystickEvent joystickEvent;