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

 
Предыдущий Следующий
MACH_RCV_TOO_LARGE MACH_RCV_PORT_CHANGED

MACH_RCV_INTERRUPTED

Отмена приёма, а не ошибка сообщения

MACH_RCV_INTERRUPTED сообщает, что программное прерывание остановило ожидающий приём. Обычно значение доступно только при выборе MACH_RCV_INTERRUPT; в противном случае оболочка mach_msg может повторить прерванный системный вызов. Код ничего не говорит об отправителе или действительности порта приёма. При таком результате сообщение не извлекалось из очереди.

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

Рекомендации по обработке

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

Ссылки


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