Browse Source

Fix shutting down HIDAPI device with multiple joysticks
Using Wii U GameCube USB adapter with multiple controllers attached and
restarting SDL input in a game results in extra joysticks with NULL name.

HIDAPI_CleanupDeviceDriver() shut down joysticks by iterating through
device->num_joysticks but each HIDAPI_JoystickDisconnected() decreases
device->num_joysticks and shifts joysticks array down. Resulting in only
half of controllers being shutdown. It worked with only 1 controller
attached though.

Disconnect HIDAPI device joystick 0 until there are none left.

Zack Middleton 5 years ago
parent
commit
f0cee3edec
1 changed files with 3 additions and 5 deletions
  1. 3 5
      src/joystick/hidapi/SDL_hidapijoystick.c

+ 3 - 5
src/joystick/hidapi/SDL_hidapijoystick.c

@@ -484,20 +484,18 @@ HIDAPI_SetupDeviceDriver(SDL_HIDAPI_Device *device)
 static void
 HIDAPI_CleanupDeviceDriver(SDL_HIDAPI_Device *device)
 {
-    int i;
-
     if (!device->driver) {
         /* Already cleaned up */
         return;
     }
 
     /* Disconnect any joysticks */
-    for (i = 0; i < device->num_joysticks; ++i) {
-        SDL_Joystick *joystick = SDL_JoystickFromInstanceID(device->joysticks[i]);
+    while (device->num_joysticks) {
+        SDL_Joystick *joystick = SDL_JoystickFromInstanceID(device->joysticks[0]);
         if (joystick) {
             HIDAPI_JoystickClose(joystick);
         }
-        HIDAPI_JoystickDisconnected(device, device->joysticks[i]);
+        HIDAPI_JoystickDisconnected(device, device->joysticks[0]);
     }
 
     device->driver->FreeDevice(device);