| Предыдущий | Следующий |
| KERN_INVALID_OBJECT | KERN_DEFAULT_SET |
KERN_ALREADY_WAITING
Дублированный переход в состояние ожидания
KERN_ALREADY_WAITING указывает на нарушение инварианта ожидания: поток попытался ожидать событие, для которого уже было зарегистрировано ожидание. Это не то же самое, что конкуренция за блокировку или медленный семафор; конечный автомат попытался дважды войти в состояние ожидания.
Наиболее ценны сведения о первой регистрации ожидания. Более поздний вызов часто обнаруживает пропущенное пробуждение, путь очистки, путь отмены или неверно повторно использованную связь поток/событие.
Что проверить
- Проследите идентификатор события, идентичность потока и стеки вызовов обеих попыток ожидания.
- Проверьте каждый путь, который удаляет, пробуждает, отменяет или повторно использует регистрацию ожидания.
- Проверьте, может ли обратный вызов повторно войти в ту же логику ожидания до завершения первого ожидания.
- Проверьте, не пропустил ли путь ошибки переход, после которого поток снова получает право ожидать.
Ссылки
- Apple XNU: kern_return.h
- Руководство Apple по программированию ядра: примитивы синхронизации
- Руководство Apple по программированию ядра: очереди ожидания планировщика
Нужно найти другой код? Найти другой код состояния или ошибки.