Что означает код возврата ядра macOS 0x10000009 (MACH_SEND_INVALID_REPLY)?

 
Предыдущий Следующий
MACH_SEND_MSG_TOO_SMALL MACH_SEND_INVALID_RIGHT

MACH_SEND_INVALID_REPLY

Почему порт ответа имеет значение

MACH_SEND_INVALID_REPLY относится к msgh_local_port — полю, обычно используемому как порт ответа. Запрос может иметь допустимый адрес назначения и всё равно завершиться ошибкой, если право обратного вызова или ответа отсутствует при обязательности по протоколу, уже освобождено, принадлежит пространству имён другой задачи либо сочетается с недопустимой диспозицией в msgh_bits.

Mach обрабатывает права портов заголовка атомарно. Если одно право используется в несовместимых ролях назначения и ответа, ядро может сообщить недопустимость назначения или ответа в зависимости от возможной атомарной интерпретации. Это проблема проектирования владения, а не случайная гонка, которую следует заглушить безусловным повтором.

Безопасная диагностика

  • Записывайте оба поля портов заголовка и их удалённые и локальные диспозиции как единое целое.
  • Создавайте порт ответа и управляйте им в соответствии с контрактом API или MIG; не используйте порт повторно после передачи или освобождения требуемого права.
  • Проверьте протокол сервера: односторонние сообщения не должны заполнять порт ответа только по соглашению.
  • После восстановления формируйте весь заголовок заново, а не меняйте только числовое имя порта.

Ссылки


Нужно найти другой код? Найти другой код состояния или ошибки.