Mac で HID ドライバー コードのクラッシュをデバッグしていたところ、CFRunLoop でクラッシュが発生していることがわかりました。ドライバー コードでは、HID デバイスに一致する VID と PID に一致するデバイスの USB ハンドルを開き、setInterruptReportHandlerCallback 関数を使用して割り込みコールバックを設定し、CFRunLoopAddSource 呼び出しを使用して CFRunLoop に追加します。クローズ ハンドルの呼び出しでは、CFRunLoopRemoveSource を使用して解放し、次に CFRunLoopSourceRef で CFRelease を使用しました。
この問題は、ハンドルを開こうとしてしばらく (5ms) 待ってから、ループでハンドルを閉じようとすると発生します。
私が問題を検索したとき、彼らが私と同様の問題を抱えていたリンクに出くわしましたhttp://lists.apple.com/archives/usb/.../msg00099.htmlここで、削除の代わりに CFRunLoopSourceInvalidate 呼び出しを使用していましたソース呼び出し。close handles 呼び出しで Invalidate source に変更すると、クラッシュが修正されました。クラッシュの違いと、この呼び出しでクラッシュが修正された理由を知りたいですか?
ありがとうjbsp72