Free the joystick player index when the joystick is removed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
diff --git a/src/joystick/SDL_joystick.c b/src/joystick/SDL_joystick.c
index 93772ec..2868cc5 100644
--- a/src/joystick/SDL_joystick.c
+++ b/src/joystick/SDL_joystick.c
@@ -158,8 +158,8 @@ SDL_SetJoystickIDForPlayerIndex(int player_index, SDL_JoystickID instance_id)
}
SDL_joystick_players = new_players;
- SDL_memset(&SDL_joystick_players[SDL_joystick_player_count], 0xFF, (player_index - SDL_joystick_player_count + 1) * sizeof(SDL_joystick_players[0]));
- SDL_joystick_player_count = player_index + 1;
+ SDL_memset(&SDL_joystick_players[SDL_joystick_player_count], 0xFF, (player_index - SDL_joystick_player_count + 1) * sizeof(SDL_joystick_players[0]));
+ SDL_joystick_player_count = player_index + 1;
}
SDL_joystick_players[player_index] = instance_id;
@@ -947,6 +947,7 @@ static void UpdateEventsForDeviceRemoval()
void SDL_PrivateJoystickRemoved(SDL_JoystickID device_instance)
{
SDL_Joystick *joystick;
+ int player_index;
#if !SDL_EVENTS_DISABLED
SDL_Event event;
@@ -969,6 +970,13 @@ void SDL_PrivateJoystickRemoved(SDL_JoystickID device_instance)
break;
}
}
+
+ SDL_LockJoysticks();
+ player_index = SDL_GetPlayerIndexForJoystickID(device_instance);
+ if (player_index >= 0) {
+ SDL_joystick_players[player_index] = -1;
+ }
+ SDL_UnlockJoysticks();
}
int
diff --git a/src/joystick/hidapi/SDL_hidapi_xbox360w.c b/src/joystick/hidapi/SDL_hidapi_xbox360w.c
index a87ff9d..4800625 100644
--- a/src/joystick/hidapi/SDL_hidapi_xbox360w.c
+++ b/src/joystick/hidapi/SDL_hidapi_xbox360w.c
@@ -245,9 +245,6 @@ HIDAPI_DriverXbox360W_UpdateDevice(SDL_HIDAPI_Device *device)
HIDAPI_JoystickConnected(device, &joystickID);
- /* Set the controller LED */
- SetSlotLED(device->dev, joystickID);
-
} else if (device->num_joysticks > 0) {
HIDAPI_JoystickDisconnected(device, device->joysticks[0]);
}