mirror of https://github.com/encounter/SDL.git
Fixed Bug 5034 - Replugging in a controller crashes on macOS in SDL 2.0.12
The Darwin/macOS joystick driver was freeing its joystick's hwdata field without zeroing it out in any live instance of SDL_Joystick.
This commit is contained in:
parent
47da53b91d
commit
197b14de4a
src/joystick/darwin
|
@ -125,6 +125,7 @@ static recDevice *
|
|||
FreeDevice(recDevice *removeDevice)
|
||||
{
|
||||
recDevice *pDeviceNext = NULL;
|
||||
SDL_Joystick *joystick = NULL;
|
||||
if (removeDevice) {
|
||||
if (removeDevice->deviceRef) {
|
||||
IOHIDDeviceUnscheduleFromRunLoop(removeDevice->deviceRef, CFRunLoopGetCurrent(), SDL_JOYSTICK_RUNLOOP_MODE);
|
||||
|
@ -146,6 +147,14 @@ FreeDevice(recDevice *removeDevice)
|
|||
}
|
||||
removeDevice->pNext = NULL;
|
||||
|
||||
/* clear out any reference to this recDevice that are being
|
||||
* held by a live instance of SDL_Joystick
|
||||
*/
|
||||
joystick = SDL_JoystickFromInstanceID(removeDevice->instance_id);
|
||||
if (joystick) {
|
||||
joystick->hwdata = NULL;
|
||||
}
|
||||
|
||||
/* free element lists */
|
||||
FreeElementList(removeDevice->firstAxis);
|
||||
FreeElementList(removeDevice->firstButton);
|
||||
|
@ -871,6 +880,10 @@ DARWIN_JoystickRumble(SDL_Joystick * joystick, Uint16 low_frequency_rumble, Uint
|
|||
/* Scale and average the two rumble strengths */
|
||||
Sint16 magnitude = (Sint16)(((low_frequency_rumble / 2) + (high_frequency_rumble / 2)) / 2);
|
||||
|
||||
if (!device) {
|
||||
return SDL_SetError("Rumble failed, device disconnected");
|
||||
}
|
||||
|
||||
if (!device->ffservice) {
|
||||
return SDL_Unsupported();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue