Backport from 1.3 branch: clean up opened joysticks in SDL_JoystickQuit().
authorRyan C. Gordon <icculus@icculus.org>
Thu, 1 Sep 2011 08:31:01 +0000 (04:31 -0400)
committernotaz <notasas@gmail.com>
Mon, 11 Mar 2013 21:09:00 +0000 (23:09 +0200)
src/joystick/SDL_joystick.c

index 1972d13..d56eab0 100644 (file)
@@ -403,11 +403,24 @@ void SDL_JoystickClose(SDL_Joystick *joystick)
 
 void SDL_JoystickQuit(void)
 {
+       const int numsticks = SDL_numjoysticks;
+       int i;
+
        /* Stop the event polling */
        SDL_Lock_EventThread();
        SDL_numjoysticks = 0;
        SDL_Unlock_EventThread();
 
+       if (SDL_joysticks != NULL) {
+               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 ) {