| Предыдущий | Следующий |
| MACH_RCV_INVALID_DATA | MACH_RCV_IN_SET |
MACH_RCV_PORT_DIED
Изменился жизненный цикл конечной точки приёма
MACH_RCV_PORT_DIED означает, что право, указанное receive_name, было потеряно во время ожидания потока. Порт или набор портов мог быть уничтожен, право приёма перемещено, либо параллельная очистка сделала локальную конечную точку недействительной. Это конкретнее тайм-аута: изменился жизненный цикл объекта ожидания.
Действие зависит от владения. Сервер при штатном завершении должен остановить цикл и освободить связанное состояние. Клиент или диспетчер, не ожидавший результат, должен найти параллельного владельца, путь завершения или перезапуск службы, удаливший право. Повторное использование прежнего числового имени опасно: имена Mach локальны для задачи и могут быть назначены другому объекту.
Что проверить
- Отследите выделение порта, включение в набор, перемещение и освобождение в одной модели владения.
- Сопоставьте событие с завершением службы, выходом задачи, переподключением launchd/XPC или отменой.
- После завершения признавайте кэшированные конечные точки недействительными и получайте их заново штатным путём.
- Разделяйте ожидаемое завершение и неожиданную потерю конечной точки в телеметрии.
Ссылки
- Справочник интерфейса ядра Mach: mach_msg
- Apple Kernel Programming Guide: обзор Mach
- Исходный код Apple XNU: mach/message.h
Нужно найти другой код? Найти другой код состояния или ошибки.