| Предыдущий | Следующий |
| kIOUSBDeviceTransferredToCompanion | kIOUSBHighSpeedSplitError |
kIOUSBSyncRequestOnWLThread
Callback попытался заблокировать workloop USB
kIOUSBSyncRequestOnWLThread означает, что синхронный запрос был выполнен в потоке workloop IOUSBFamily, обычно из callback завершения. Это контракт потоков и повторного входа, а не признак неправильной конечной точки. Синхронный запрос ожидает прогресса, для которого может требоваться работа того же workloop, поэтому его разрешение в таком контексте способно вызвать взаимную блокировку клиента или остановить несвязанные операции USB.
Нужно различать место сообщения об ошибке и контекст, в котором должен выполняться запрос. Callback завершения может решить, что делать дальше, но не должен превращать это решение в блокирующее чтение, запись, управляющий запрос или восстановление на workloop.
Безопасное продолжение
- Запишите тип callback, конечную точку, версию интерфейса и стек вызовов, приведший к синхронному запросу.
- Замените последующую работу из callback соответствующей асинхронной операцией и продвигайте автомат состояний устройства из её завершения.
- Явно задайте владение операцией и правила отмены: удаление устройства, stall канала или тайм-аут могут завершить асинхронный запрос уже после перехода высокоуровневого процесса к следующему состоянию.
- Выполняйте блокирующую протокольную работу только в контексте, который не владеет путём callbacks IOUSBFamily.
Ссылки
- Apple: kIOUSBSyncRequestOnWLThread
- Apple: коды ошибок IOUSBFamily
- libusb: асинхронный ввод-вывод и ограничения callbacks обработки событий
Нужно найти другой код? Найти другой код состояния или ошибки.