BSOD
0x0000000F: SPIN_LOCK_ALREADY_OWNED
Синий экран смерти 0x0000000F указывает, что запрос на spin-блокировку инициировался, когда данная блокировка уже запущена.
Причина
Как правило, эта ошибка вызвана рекурсивным запросом на spin-блокировку. Например, когда spin-блокировка была получена потоком, и затем тот же самый поток вызывает функцию, которая также пытается получить spin-блокировку. Вторая попытка получить spin-блокировку не блокируется, потому что это привело бы к взаимоблокировке. Если вызовы будут выполнены больше чем на одном процессоре, то один процессор будет блокирован, пока другой процессор не отпустит блокировку.
Эта ошибка может также произойти без явной рекурсии, когда всем потокам и всем spin-блокировкам присваиваются IRQL. IRQL spin-блокировки всегда больше или равен уровню DPC, но это не учитывается для потоков. Однако, IRQL потока, который содержит spin-блокировку, должен поддержать большее или равное значение с IRQL spin-блокировки. При уменьшении IRQL потока ниже уровня IRQL spin-блокировки, которую поток содержит, позволяет другому потоку выполнятся процессором. Этот новый поток может попытаться получить ту же самую spin-блокировку.
Убедитесь, что Вы рекурсивно не получаете блокировку. И, для потоков, которые содержат spin-блокировку, убедитесь, что Вы не уменьшаете IRQL потока к уровню ниже IRQL spin-блокировки, которую он содержит.
Решение
Для устранения ошибки воспользуйтесь статьей Общие рекомендации по устранению BSoD.
{jcomments on}