Что означает код возврата ядра macOS 0xE000404A (kIOUSBSyncRequestOnWLThread)?

 
Предыдущий Следующий
kIOUSBDeviceTransferredToCompanion kIOUSBHighSpeedSplitError

kIOUSBSyncRequestOnWLThread

Callback попытался заблокировать workloop USB

kIOUSBSyncRequestOnWLThread означает, что синхронный запрос был выполнен в потоке workloop IOUSBFamily, обычно из callback завершения. Это контракт потоков и повторного входа, а не признак неправильной конечной точки. Синхронный запрос ожидает прогресса, для которого может требоваться работа того же workloop, поэтому его разрешение в таком контексте способно вызвать взаимную блокировку клиента или остановить несвязанные операции USB.

Нужно различать место сообщения об ошибке и контекст, в котором должен выполняться запрос. Callback завершения может решить, что делать дальше, но не должен превращать это решение в блокирующее чтение, запись, управляющий запрос или восстановление на workloop.

Безопасное продолжение

  • Запишите тип callback, конечную точку, версию интерфейса и стек вызовов, приведший к синхронному запросу.
  • Замените последующую работу из callback соответствующей асинхронной операцией и продвигайте автомат состояний устройства из её завершения.
  • Явно задайте владение операцией и правила отмены: удаление устройства, stall канала или тайм-аут могут завершить асинхронный запрос уже после перехода высокоуровневого процесса к следующему состоянию.
  • Выполняйте блокирующую протокольную работу только в контексте, который не владеет путём callbacks IOUSBFamily.

Ссылки


Нужно найти другой код? Найти другой код состояния или ошибки.