diff --git a/src/joystick/SDL_joystick.c b/src/joystick/SDL_joystick.c index a5b3e63b4..430934c33 100644 --- a/src/joystick/SDL_joystick.c +++ b/src/joystick/SDL_joystick.c @@ -699,9 +699,12 @@ SDL_JoystickQuit(void) int i; /* Make sure we're not getting called in the middle of updating joysticks */ - SDL_assert(!SDL_updating_joystick); - SDL_LockJoysticks(); + while (SDL_updating_joystick) { + SDL_UnlockJoysticks(); + SDL_Delay(1); + SDL_LockJoysticks(); + } /* Stop the event polling */ while (SDL_joysticks) { @@ -724,8 +727,9 @@ SDL_JoystickQuit(void) SDL_JoystickAllowBackgroundEventsChanged, NULL); if (SDL_joystick_lock) { - SDL_DestroyMutex(SDL_joystick_lock); + SDL_mutex *mutex = SDL_joystick_lock; SDL_joystick_lock = NULL; + SDL_DestroyMutex(mutex); } SDL_GameControllerQuitMappings();