mirror of https://github.com/libsdl-org/SDL.git
Fixed crash with joystick rumble after disconnection
This prevents continuing a rumble after the first one fails, and fixes a long standing crash issue if rumble is started immediately before the controller is disconnected.
Thanks to @AntTheAlchemist for the key bug report that showed what was happening here.
Fixes https://github.com/libsdl-org/SDL/issues/10422
(cherry picked from commit 0a924b185d)
This commit is contained in:
parent
15c73f5bfe
commit
7fdf794377
|
|
@ -1412,9 +1412,13 @@ int SDL_JoystickRumble(SDL_Joystick *joystick, Uint16 low_frequency_rumble, Uint
|
||||||
retval = 0;
|
retval = 0;
|
||||||
} else {
|
} else {
|
||||||
retval = joystick->driver->Rumble(joystick, low_frequency_rumble, high_frequency_rumble);
|
retval = joystick->driver->Rumble(joystick, low_frequency_rumble, high_frequency_rumble);
|
||||||
joystick->rumble_resend = SDL_GetTicks() + SDL_RUMBLE_RESEND_MS;
|
if (retval == 0) {
|
||||||
if (!joystick->rumble_resend) {
|
joystick->rumble_resend = SDL_GetTicks() + SDL_RUMBLE_RESEND_MS;
|
||||||
joystick->rumble_resend = 1;
|
if (joystick->rumble_resend == 0) {
|
||||||
|
joystick->rumble_resend = 1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
joystick->rumble_resend = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2177,12 +2181,14 @@ void SDL_JoystickUpdate(void)
|
||||||
#endif /* SDL_JOYSTICK_HIDAPI */
|
#endif /* SDL_JOYSTICK_HIDAPI */
|
||||||
|
|
||||||
for (joystick = SDL_joysticks; joystick; joystick = joystick->next) {
|
for (joystick = SDL_joysticks; joystick; joystick = joystick->next) {
|
||||||
if (joystick->attached) {
|
if (!joystick->attached) {
|
||||||
joystick->driver->Update(joystick);
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (joystick->delayed_guide_button) {
|
joystick->driver->Update(joystick);
|
||||||
SDL_GameControllerHandleDelayedGuideButton(joystick);
|
|
||||||
}
|
if (joystick->delayed_guide_button) {
|
||||||
|
SDL_GameControllerHandleDelayedGuideButton(joystick);
|
||||||
}
|
}
|
||||||
|
|
||||||
now = SDL_GetTicks();
|
now = SDL_GetTicks();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue