Я отлаживал сбой в моем коде драйвера HID на Mac и обнаружил, что авария произошла в CFRunLoop. В коде драйвера я открываю USB-ручки для устройств, которые соответствуют VID и PID, которые соответствуют моему HID-устройству, а затем настраивают вызов прерывания для него с помощью функции setInterruptReportHandlerCallback, а затем добавляют его в CFRunLoop с помощью вызова CFRunLoopAddSource. В моем обращении к закрытым ручкам я освободил их, используя CFRunLoopRemoveSource, а затем CFRelease на CFRunLoopSourceRef.Разница между CFRunLoopRemoveSource и CFRunLoopSourceInvalidate
Проблема возникает, когда я пытаюсь открыть ручки, подождите некоторое время (5 мс), а затем закройте ручки в цикле.
Когда я искал проблему, я наткнулся на ссылку, где у них была аналогичная проблема с моим http://lists.apple.com/archives/usb/.../msg00099.html, где они использовали вызов CFRunLoopSourceInvalidate вместо вызова Remove Source. Когда я изменил его на Invalidate source в моем вызове с закрытыми адресами, он исправил мой сбой. Я хотел знать, в чем разница между сбоем и почему этот звонок исправил мой крах?
Благодаря jbsp72
Я только что нашел ту же ошибку в ветке Q7 4.7, в qeventdispatcher_mac.mm. Уч. – asandroq