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

 
Предыдущий Следующий
MACH_RCV_INVALID_DATA MACH_RCV_IN_SET

MACH_RCV_PORT_DIED

Изменился жизненный цикл конечной точки приёма

MACH_RCV_PORT_DIED означает, что право, указанное receive_name, было потеряно во время ожидания потока. Порт или набор портов мог быть уничтожен, право приёма перемещено, либо параллельная очистка сделала локальную конечную точку недействительной. Это конкретнее тайм-аута: изменился жизненный цикл объекта ожидания.

Действие зависит от владения. Сервер при штатном завершении должен остановить цикл и освободить связанное состояние. Клиент или диспетчер, не ожидавший результат, должен найти параллельного владельца, путь завершения или перезапуск службы, удаливший право. Повторное использование прежнего числового имени опасно: имена Mach локальны для задачи и могут быть назначены другому объекту.

Что проверить

  • Отследите выделение порта, включение в набор, перемещение и освобождение в одной модели владения.
  • Сопоставьте событие с завершением службы, выходом задачи, переподключением launchd/XPC или отменой.
  • После завершения признавайте кэшированные конечные точки недействительными и получайте их заново штатным путём.
  • Разделяйте ожидаемое завершение и неожиданную потерю конечной точки в телеметрии.

Ссылки


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