| Предыдущий | Следующий |
| MACH_SEND_INVALID_DEST | MACH_SEND_INVALID_VOUCHER |
MACH_SEND_TIMED_OUT
Что означает тайм-аут
MACH_SEND_TIMED_OUT обычно является результатом обратного давления. При MACH_SEND_TIMEOUT отправитель, ожидающий свободного места в очереди целевого порта, возвращается после истечения заданного интервала. Это не сетевой тайм-аут удалённой системы: порты Mach являются локальными конечными объектами IPC ядра. Служба может работать, но недостаточно быстро освобождать очередь, быть заблокированной зависимостью или перегруженной производителями запросов.
Интерфейс Mach описывает это как случай псевдоприёма: ядро пытается вернуть содержимое сообщения вызывающей стороне, не теряя переданные права или внестрочную память. После такого восстановления имена и адреса в сложном сообщении могут отличаться от значений до отправки. Поэтому перед повтором следует исследовать или заново сформировать сообщение, а не слепо использовать устаревшее вспомогательное состояние.
Восстановление и диагностика
- Запишите целевой порт, значение тайм-аута, скорость постановки в очередь и наличие в сообщении передаваемых прав или внестрочной памяти.
- Используйте ограниченные повторы с задержкой только для запросов, которые безопасно выдавать повторно.
- До увеличения тайм-аутов исследуйте цикл диспетчеризации получателя, блокирующие вызовы, конкуренцию за блокировки и предел очереди.
- Примените управление потоком на уровне приложения, если производители способны опережать потребителя; постоянно растущий тайм-аут лишь скрывает накопление очереди.
Ссылки
- Справочник интерфейса ядра Mach: mach_msg
- Исходный код Apple XNU: реализация mach_msg
- Справочное руководство GNU Mach: межпроцессное взаимодействие
Нужно найти другой код? Найти другой код состояния или ошибки.