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

 
Предыдущий Следующий
kIOUSBLinkErr kIOUSBInvalidSSEndpoint

kIOUSBTooManyTransactionsPending

Обратное давление при отправке

kIOUSBTooManyTransactionsPending — не ошибка завершения от USB-устройства. Определение IOUSBFamily говорит, что запрос нельзя отправить, поскольку он превысил бы разрешённое число ожидающих транзакций. Следовательно, это сигнал ёмкости очереди или управления потоком от стека либо контроллера на стороне хоста.

Правильная реакция зависит от владения запросами и их порядка. Отбрасывание произвольного запроса может нарушить протокольную последовательность, а бесконечные быстрые повторы способны помешать завершению старых запросов. Приложению нужна ограниченная очередь и освобождение ёмкости, управляемое завершениями.

Что измерять

  • Отслеживайте глубину очереди отдельно для каждой конечной точки и направления передачи, а не только общее число запросов устройства USB.
  • Журналируйте время отправки и завершения, отмену, тайм-аут и события возврата запросов, чтобы найти запрос, после которого очередь перестала освобождаться.
  • Отличайте обратное давление приложения от приостановки, сброса или stall контроллера; эти состояния способны создать видимое накопление очереди.
  • Используйте ограниченную политику повторов, запускаемую завершением или изменением состояния, а не непрерывную повторную отправку того же запроса.

Ссылки


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