| Предыдущий | Следующий |
| KERN_RESOURCE_SHORTAGE | KERN_NO_ACCESS |
KERN_NOT_RECEIVER
KERN_NOT_RECEIVER — ошибка прав порта Mach. Задача, указанная в операции, не владеет правом приёма для аргумента порта. Порт Mach — не просто глобально доступное число: права являются возможностями, хранящимися в собственном пространстве имён портов каждой задачи.
В модели обмена Mach у порта обычно один получатель и потенциально много отправителей. Право отправки позволяет посылать сообщения, но не разрешает принимать их из очереди порта или управлять состоянием принимающей стороны. Поэтому правдоподобного имени порта или права отправки недостаточно для операций, требующих получателя.
Что проверить
- Какая задача владеет правом приёма и к пространству имён какой задачи относится вызов.
- Было ли право передано как право отправки, однократной отправки или приёма.
- Не был ли порт уничтожен, перемещён или заменён во время настройки либо завершения.
- Не пытается ли API управлять набором портов или очередью приёма, когда вызывающий код имеет только возможность отправки.
Диагностика этого кода как обычного отказа доступа может ввести в заблуждение. Главный вопрос — владение возможностью: операции Mach разрешаются в соответствии с конкретным видом права, которым обладает соответствующая задача.
Ссылки
- XNU: kern_return.h
- Apple Kernel Programming Guide: порты и права Mach
- GNU Mach Reference Manual: интерфейс управления портами
Нужно найти другой код? Найти другой код состояния или ошибки.
