| Предыдущий | Следующий |
| MACH_RCV_IN_PROGRESS | MACH_RCV_TIMED_OUT |
MACH_RCV_INVALID_NAME
Проблема права приёма и членства
MACH_RCV_INVALID_NAME означает, что receive_name, переданное в mach_msg, не обозначает допустимую цель приёма в пространстве имён вызывающей задачи. Знания числового имени порта недостаточно для приёма: извлекать сообщения из очереди может только задача, владеющая правом приёма. Набор портов также отличается от отдельного порта, а правила членства влияют на имя, которое допустимо использовать для приёма.
Результат локален для принимающей задачи. Он не доказывает, что отправители завершились ошибкой или служба исчезла; текущий поток не может законно ожидать указанный объект. Перед следующим циклом приёма заново создайте или получите правильную конечную точку приёма.
Что проверить
- Определите, обозначает ли имя право приёма, право отправки, мёртвое имя, набор портов или ничего в этой задаче.
- Проверьте, не было ли право приёма перемещено, освобождено или добавлено в набор портов другим потоком.
- При диспетчеризации нескольких портов используйте предусмотренный путь приёма через набор портов.
- Не передавайте числовое имя порта между задачами без передачи права поддерживаемым способом.
Ссылки
- Справочник интерфейса ядра Mach: mach_msg
- Руководство Apple по программированию ядра: обзор Mach
- Исходный код Apple XNU: mach/message.h
Нужно найти другой код? Найти другой код состояния или ошибки.
