| Предыдущий | Следующий |
| MACH_RCV_PORT_DIED | MACH_RCV_HEADER_ERROR |
MACH_RCV_IN_SET
Статус совместимости для членства в наборе портов
MACH_RCV_IN_SET исторически означал, что вызывающая сторона указала отдельное право приёма, уже входящее в набор портов. Семантика приёма Mach различает получение из одного порта и через набор: набор может доставить сообщение от любого члена, а заголовок принятого сообщения определяет порт-источник. Текущие заголовки XNU сохраняют это числовое значение для совместимости, но указывают, что оно больше не возвращается.
Поэтому код управления наборами портов должен непосредственно проверять топологию, а не зависеть от этой устаревшей ошибки. Параллельные изменения членства требуют синхронизации, иначе поток приёма, поток перенастройки и путь завершения могут расходиться во мнении о владельце приёма.
Что проверить
- Подтвердите, должен ли приём выполняться по имени самого набора или отдельного порта-члена.
- Зафиксируйте членство до запуска рабочих потоков и записывайте каждое добавление в набор или удаление из него.
- Если статус появляется в современной macOS, проследите его источник: это могут быть старые телеметрические данные или реализация не на XNU.
- Не удаляйте порт из набора только для подавления кода, если прямой приём не предусмотрен архитектурой.
Ссылки
Нужно найти другой код? Найти другой код состояния или ошибки.