SDL
- fix crash on OSX when removing a device. If the remove happened due to the CFRunLoopRunInMode call in SDL_SYS_JoystickDetect then we would delete the device right away, before SDL_SYS_JoystickUpdate could clean it up. So move the CFRunLoopRunInMode to after the cleanup logic, preventing this case. This does mean that adds and removes of joysticks now take 1 extra frame to show up.main
parent
d6c4296653
commit
d34d608e59
|
@ -560,10 +560,6 @@ SDL_SYS_NumJoysticks()
|
||||||
void
|
void
|
||||||
SDL_SYS_JoystickDetect()
|
SDL_SYS_JoystickDetect()
|
||||||
{
|
{
|
||||||
while (CFRunLoopRunInMode(SDL_JOYSTICK_RUNLOOP_MODE,0,TRUE) == kCFRunLoopRunHandledSource) {
|
|
||||||
/* no-op. Pending callbacks will fire in CFRunLoopRunInMode(). */
|
|
||||||
}
|
|
||||||
|
|
||||||
if (s_bDeviceAdded || s_bDeviceRemoved) {
|
if (s_bDeviceAdded || s_bDeviceRemoved) {
|
||||||
recDevice *device = gpDeviceList;
|
recDevice *device = gpDeviceList;
|
||||||
s_bDeviceAdded = SDL_FALSE;
|
s_bDeviceAdded = SDL_FALSE;
|
||||||
|
@ -613,6 +609,12 @@ SDL_SYS_JoystickDetect()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// run this after the checks above so we don't set device->removed and delete the device before
|
||||||
|
// SDL_SYS_JoystickUpdate can run to clean up the SDL_Joystick object that owns this device
|
||||||
|
while (CFRunLoopRunInMode(SDL_JOYSTICK_RUNLOOP_MODE,0,TRUE) == kCFRunLoopRunHandledSource) {
|
||||||
|
/* no-op. Pending callbacks will fire in CFRunLoopRunInMode(). */
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Function to get the device-dependent name of a joystick */
|
/* Function to get the device-dependent name of a joystick */
|
||||||
|
|
Loading…
Reference in New Issue