| Предыдущий | Следующий |
| MACH_SEND_INVALID_VOUCHER | MACH_SEND_MSG_TOO_SMALL |
MACH_SEND_INTERRUPTED
Семантика прерываемой отправки
MACH_SEND_INTERRUPTED означает, что программное прерывание отменило отправку, ожидавшую в ядре. Статус особенно значим, если вызов использовал MACH_SEND_INTERRUPT; иначе пользовательская оболочка mach_msg обычно повторяет прерванную отправку. Следовательно, это явный результат управления потоком, выбранный вызывающей стороной, а не доказательство отклонения запроса назначением.
Для этого результата Mach использует путь восстановления pseudo-receive, чтобы по возможности вернуть сообщение. Это важно для сложных сообщений с перемещаемыми правами или внестрочной памятью. Не предполагайте, что запрос поставлен в очередь, и не освобождайте и не дублируйте переданные ресурсы до проверки их состояния после возврата.
Как обрабатывать
- Определите, допустима ли отмена для конкретного RPC; повтор прерванной операции иначе может продублировать работу.
- Используйте идентификатор запроса и подтверждение для операций с побочными эффектами.
- Перед повтором проверьте возвращённый буфер сообщения, если дескрипторы передают права или память.
- Запишите активные параметры Mach и путь отмены или сигнала, прервавший поток.
Ссылки
- Справочник интерфейса ядра Mach: mach_msg
- Исходный код Apple XNU: реализация mach_msg
- Руководство Apple по программированию ядра: обзор Mach
Нужно найти другой код? Найти другой код состояния или ошибки.
