From f0cee3edec830544892cbe6dd348b8e9d2cbc3ed Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Sun, 22 Dec 2019 13:15:11 -0800 Subject: [PATCH] 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. --- src/joystick/hidapi/SDL_hidapijoystick.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/joystick/hidapi/SDL_hidapijoystick.c b/src/joystick/hidapi/SDL_hidapijoystick.c index ef9ee08f0..3248769ab 100644 --- a/src/joystick/hidapi/SDL_hidapijoystick.c +++ b/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);