diff --git a/src/joystick/SDL_joystick.c b/src/joystick/SDL_joystick.c index 64afb9d15..83c07a29e 100644 --- a/src/joystick/SDL_joystick.c +++ b/src/joystick/SDL_joystick.c @@ -403,9 +403,22 @@ SDL_JoystickClose(SDL_Joystick * joystick) void SDL_JoystickQuit(void) { + const int numsticks = SDL_numjoysticks; + int i; + /* Stop the event polling */ SDL_numjoysticks = 0; + SDL_assert( (SDL_joysticks == NULL) == (numsticks == 0) ); + + for (i = 0; i < numsticks; i++) { + SDL_Joystick *stick = SDL_joysticks[i]; + if (stick && (stick->ref_count >= 1)) { + stick->ref_count = 1; + SDL_JoystickClose(stick); + } + } + /* Quit the joystick setup */ SDL_SYS_JoystickQuit(); if (SDL_joysticks) {