mirror of https://github.com/encounter/SDL.git
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.
This commit is contained in:
parent
d6c4296653
commit
d34d608e59
|
@ -560,10 +560,6 @@ SDL_SYS_NumJoysticks()
|
|||
void
|
||||
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) {
|
||||
recDevice *device = gpDeviceList;
|
||||
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 */
|
||||
|
|
Loading…
Reference in New Issue