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
|
@ -125,6 +125,7 @@ static recDevice *
|
||||||
FreeDevice(recDevice *removeDevice)
|
FreeDevice(recDevice *removeDevice)
|
||||||
{
|
{
|
||||||
recDevice *pDeviceNext = NULL;
|
recDevice *pDeviceNext = NULL;
|
||||||
|
SDL_Joystick *joystick = NULL;
|
||||||
if (removeDevice) {
|
if (removeDevice) {
|
||||||
if (removeDevice->deviceRef) {
|
if (removeDevice->deviceRef) {
|
||||||
IOHIDDeviceUnscheduleFromRunLoop(removeDevice->deviceRef, CFRunLoopGetCurrent(), SDL_JOYSTICK_RUNLOOP_MODE);
|
IOHIDDeviceUnscheduleFromRunLoop(removeDevice->deviceRef, CFRunLoopGetCurrent(), SDL_JOYSTICK_RUNLOOP_MODE);
|
||||||
|
@ -146,6 +147,14 @@ FreeDevice(recDevice *removeDevice)
|
||||||
}
|
}
|
||||||
removeDevice->pNext = NULL;
|
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 */
|
/* free element lists */
|
||||||
FreeElementList(removeDevice->firstAxis);
|
FreeElementList(removeDevice->firstAxis);
|
||||||
FreeElementList(removeDevice->firstButton);
|
FreeElementList(removeDevice->firstButton);
|
||||||
|
@ -871,6 +880,10 @@ DARWIN_JoystickRumble(SDL_Joystick * joystick, Uint16 low_frequency_rumble, Uint
|
||||||
/* Scale and average the two rumble strengths */
|
/* Scale and average the two rumble strengths */
|
||||||
Sint16 magnitude = (Sint16)(((low_frequency_rumble / 2) + (high_frequency_rumble / 2)) / 2);
|
Sint16 magnitude = (Sint16)(((low_frequency_rumble / 2) + (high_frequency_rumble / 2)) / 2);
|
||||||
|
|
||||||
|
if (!device) {
|
||||||
|
return SDL_SetError("Rumble failed, device disconnected");
|
||||||
|
}
|
||||||
|
|
||||||
if (!device->ffservice) {
|
if (!device->ffservice) {
|
||||||
return SDL_Unsupported();
|
return SDL_Unsupported();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue