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

 
Предыдущий Следующий
MACH_RCV_INVALID_NOTIFY MACH_RCV_PORT_DIED

MACH_RCV_INVALID_DATA

Буфер встроенных данных на стороне приёма непригоден для этой операции

MACH_RCV_INVALID_DATA — результат приёма, соответствующий недопустимому буферу сообщения для встроенных данных. Он относится к предоставленному вызывающей стороной хранилищу приёма, а не к неверной полезной нагрузке, сформированной другой стороной. В частности, он отличается от MACH_RCV_TOO_LARGE: сообщение о слишком большом размере может возникнуть при допустимом хранилище, тогда как данный статус означает, что сам буфер нельзя использовать в пути приёма.

Буфер приёма должен оставаться действительным на протяжении системного вызова и соответствовать выбранному API приёма. Путаница часто возникает, когда оболочка переключается между mach_msg и mach_msg_overwrite, повторно использует буфер отправки после окончания его времени жизни или передаёт размер, больше не соответствующий фактическому выделению.

Что исследовать

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

Ссылки


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