| Предыдущий | Следующий |
| 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отдельно по документированной политике выбора размера, а не считайте каждую ошибку приёма проблемой ёмкости буфера.
Ссылки
- Исходный код Apple XNU: mach/message.h
- Справочник интерфейса ядра Mach: mach_msg
- Справочное руководство GNU Mach: межпроцессное взаимодействие
Нужно найти другой код? Найти другой код состояния или ошибки.