0xF de Verificação de Bugs: SPIN_LOCK_ALREADY_OWNED
O marcar de bugs SPIN_LOCK_ALREADY_OWNED tem um valor de 0x0000000F. Isso indica que uma solicitação para um bloqueio de rotação foi iniciada quando o bloqueio de rotação já era propriedade.
Importante
Este artigo é para programadores. Se você for um cliente que recebeu um código de erro de tela azul ao usar o computador, consulte Solucionar erros de tela azul.
Parâmetros de SPIN_LOCK_ALREADY_OWNED
Nenhum
Causa
Normalmente, esse erro é causado por uma solicitação recursiva para um bloqueio de rotação. Também pode ocorrer se algo semelhante a uma solicitação recursiva para um bloqueio de rotação tiver sido iniciado, por exemplo, quando um bloqueio de rotação foi adquirido por um thread e, em seguida, esse mesmo thread chama uma função, que também tenta adquirir um bloqueio de rotação. A segunda tentativa de adquirir um bloqueio de rotação não é bloqueada nesse caso porque isso resultaria em um deadlock irrecuperável. Se as chamadas forem feitas em mais de um processador, um processador será bloqueado até que o outro processador libere o bloqueio.
Esse erro também pode ocorrer, sem recursão explícita, quando todos os threads e todos os bloqueios de rotação recebem um IRQL. Os IRQLs de bloqueio de rotação são sempre maiores ou iguais ao nível de DPC, mas isso não é verdadeiro para threads. No entanto, um thread que está mantendo um bloqueio de rotação deve manter um IRQL maior ou igual ao do bloqueio de rotação. Diminuir o IRQL do thread abaixo do nível IRQL do bloqueio de rotação que ele está mantendo permite que outro thread seja agendado no processador. Esse novo thread pode tentar adquirir o mesmo bloqueio de rotação.
Resolução
Verifique se você não está adquirindo recursivamente o bloqueio. E, para threads que contêm um bloqueio de rotação, verifique se você não está diminuindo o IRQL do thread para um nível abaixo do IRQL do bloqueio de rotação que ele está mantendo.