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

 
Предыдущий Следующий
MACH_RCV_PORT_DIED MACH_RCV_HEADER_ERROR

MACH_RCV_IN_SET

Статус совместимости для членства в наборе портов

MACH_RCV_IN_SET исторически означал, что вызывающая сторона указала отдельное право приёма, уже входящее в набор портов. Семантика приёма Mach различает получение из одного порта и через набор: набор может доставить сообщение от любого члена, а заголовок принятого сообщения определяет порт-источник. Текущие заголовки XNU сохраняют это числовое значение для совместимости, но указывают, что оно больше не возвращается.

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

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

  • Подтвердите, должен ли приём выполняться по имени самого набора или отдельного порта-члена.
  • Зафиксируйте членство до запуска рабочих потоков и записывайте каждое добавление в набор или удаление из него.
  • Если статус появляется в современной macOS, проследите его источник: это могут быть старые телеметрические данные или реализация не на XNU.
  • Не удаляйте порт из набора только для подавления кода, если прямой приём не предусмотрен архитектурой.

Ссылки


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