Fixed crash on Mac OS X 10.10 and earlier
parent
012217f069
commit
6d67c98e70
|
@ -195,6 +195,11 @@ static IOHIDManagerRef s_hidManager = NULL;
|
|||
static void
|
||||
HIDCallback(void *context, IOReturn result, void *sender, IOHIDValueRef value)
|
||||
{
|
||||
if (context != s_hidManager) {
|
||||
/* An old callback, ignore it (related to bug 2157 below) */
|
||||
return;
|
||||
}
|
||||
|
||||
IOHIDElementRef elem = IOHIDValueGetElement(value);
|
||||
if (IOHIDElementGetUsagePage(elem) != kHIDPage_KeyboardOrKeypad
|
||||
|| IOHIDElementGetUsage(elem) != kHIDUsage_KeyboardCapsLock) {
|
||||
|
@ -232,13 +237,14 @@ QuitHIDCallback()
|
|||
if (!s_hidManager) {
|
||||
return;
|
||||
}
|
||||
IOHIDManagerUnscheduleFromRunLoop(s_hidManager, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode);
|
||||
IOHIDManagerRegisterInputValueCallback(s_hidManager, NULL, NULL);
|
||||
IOHIDManagerClose(s_hidManager, 0);
|
||||
|
||||
#if 0 /* Releasing here causes a crash on Mac OS X 10.10 and earlier,
|
||||
* so just leak it for now. See bug 2157 for details.
|
||||
*/
|
||||
IOHIDManagerUnscheduleFromRunLoop(s_hidManager, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode);
|
||||
IOHIDManagerRegisterInputValueCallback(s_hidManager, NULL, NULL);
|
||||
IOHIDManagerClose(s_hidManager, 0);
|
||||
|
||||
CFRelease(s_hidManager);
|
||||
#endif
|
||||
s_hidManager = NULL;
|
||||
|
@ -267,7 +273,7 @@ InitHIDCallback()
|
|||
goto fail;
|
||||
}
|
||||
IOHIDManagerSetDeviceMatchingMultiple(s_hidManager, matches);
|
||||
IOHIDManagerRegisterInputValueCallback(s_hidManager, HIDCallback, NULL);
|
||||
IOHIDManagerRegisterInputValueCallback(s_hidManager, HIDCallback, s_hidManager);
|
||||
IOHIDManagerScheduleWithRunLoop(s_hidManager, CFRunLoopGetMain(), kCFRunLoopDefaultMode);
|
||||
if (IOHIDManagerOpen(s_hidManager, kIOHIDOptionsTypeNone) == kIOReturnSuccess) {
|
||||
goto cleanup;
|
||||
|
|
Loading…
Reference in New Issue