| Предыдущий | Следующий |
| KERN_DENIED | MACH_MSG_IPC_KERNEL |
MACH_MSG_VM_KERNEL
Как используется этот бит
MACH_MSG_VM_KERNEL является дополнительным битом, а не полным результатом mach_msg сам по себе. Ядро добавляет его посредством OR к MACH_RCV_HEADER_ERROR, MACH_RCV_BODY_ERRORлибо к результату отправки, псевдоприём которого не смог полностью восстановить сообщение. Он обозначает нехватку ресурсов виртуальной памяти ядра при передаче дескриптора внестрочной памяти.
Это различие важно, поскольку сообщение уже могло быть извлечено из очереди или частично преобразовано. Неудачная отправка также может вернуть буфер, в котором адреса внестрочной памяти или имена портов изменились во время псевдоприёма. Код должен сначала отделить базовый результат от специальных битов, а затем выполнить очистку, соответствующую базовому результату.
Что следует проверить
- Декодируйте результат с помощью
MACH_MSG_MASKи записывайте базовую ошибку отправки или приёма отдельно. - Зафиксируйте каждый внестрочный дескриптор, его размер, вариант копирования и флаг освобождения.
- Ищите общесистемное давление на память, а не предполагайте, что получателю просто не хватает адресного пространства; последнему случаю соответствует
MACH_MSG_VM_SPACE. - Не отправляйте сложное сообщение повторно вслепую, пока заново не проверено владение перемещённой памятью и правами.
Ссылки
Нужно найти другой код? Найти другой код состояния или ошибки.