| Предыдущий | Следующий |
| kIOReturnBusy | kIOReturnOffline |
kIOReturnTimeout
Истёк срок, но причина не установлена
kIOReturnTimeout означает истечение срока ввода-вывода. Код описывает непосредственный результат управления, но не причину задержки. К нему могут привести медленное или не отвечающее устройство, перегруженный work loop, заблокированная очередь, потерянный ответ транспорта, нереалистичный тайм-аут либо предшествующий переход питания или конфигурации.
Обработка тайм-аута должна учитывать, могла ли операция уже оказать действие. Повтор чтения часто безопасен; повтор команды, меняющей состояние, записи или сброса может продублировать работу, если протокол не предоставляет подтверждение или правило идемпотентности. До решения о повторе сохраните идентификатор операции и состояние завершения.
Как исследовать тайм-аут
- Запишите значение тайм-аута, время начала и окончания, целевой объект и сведения о частичном завершении.
- Проверьте параллельные запросы, способные блокировать ту же очередь драйвера или конечную точку устройства.
- Сопоставьте тайм-аут с нормальным временем обслуживания под обычной нагрузкой, прежде чем увеличивать его.
- После тайм-аута обновите состояние устройства и обработайте уведомления об удалении или сбросе, прежде чем планировать новую работу.
Ссылки
- Справочник Apple по IOReturn.h
- Основы Apple IOKit: обзор архитектуры
- Apple: работа с интерфейсами USB-устройств
- Справочник API libusb
Нужно найти другой код? Найти другой код состояния или ошибки.
