| Предыдущий | Следующий |
| KERN_LOCK_OWNED | KERN_SEMAPHORE_DESTROYED |
KERN_LOCK_OWNED_SELF
Самовладение обнаруживает проблему повторного входа
KERN_LOCK_OWNED_SELF означает, что вызывающая сторона уже владеет блокировкой. Это отличается от конкуренции с другим потоком: простое ожидание не поможет, поскольку тот же поток должен сначала выйти, освободить блокировку или избежать второй несовместимой операции блокировки.
Результат указывает на рекурсию или повторный вход в коде, предполагающем нерекурсивный контракт блокировки, часто через обратный вызов, уведомление, путь ошибки или вспомогательную функцию, которая незаметно обращается к тому же защищённому ресурсу.
Что проверить
- Зафиксируйте стек первоначального захвата и стек второго захвата.
- Проверьте, не выполняется ли обратный вызов до выхода из первой критической секции.
- Проверьте код очистки и трассировки на скрытые обратные обращения к защищённой подсистеме.
- Не заменяйте нерекурсивную блокировку рекурсивной, если инварианты защищённых данных не допускают повторный вход.
Ссылки
- Apple XNU: kern_return.h
- Руководство Apple по программированию ядра: блокировки и синхронизация
- Руководство Apple по программированию ядра: задания и потоки Mach
Нужно найти другой код? Найти другой код состояния или ошибки.