Comprobación de errores 0xF: SPIN_LOCK_ALREADY_OWNED

La comprobación de errores de SPIN_LOCK_ALREADY_OWNED tiene un valor de 0x0000000F. Esto indica que se ha iniciado una solicitud de bloqueo de número cuando el bloqueo de número ya era propiedad.

Importante

Este artículo es para programadores. Si es un cliente que ha recibido un código de error de pantalla azul mientras usa el equipo, consulte Solución de errores de pantalla azul.

parámetros de SPIN_LOCK_ALREADY_OWNED

Ninguno

Causa

Normalmente, este error se debe a una solicitud recursiva para un bloqueo de número. También puede ocurrir si un subproceso ha iniciado una solicitud recursiva para un bloqueo de número, por ejemplo, cuando un subproceso ha adquirido un bloqueo de número y, a continuación, ese mismo subproceso llama a una función, que también intenta adquirir un bloqueo de número. El segundo intento de adquirir un bloqueo de número no se bloquea en este caso porque, al hacerlo, se produciría un interbloqueo irrecuperable. Si las llamadas se realizan en más de un procesador, se bloqueará un procesador hasta que el otro procesador libere el bloqueo.

Este error también puede producirse, sin recursividad explícita, cuando a todos los subprocesos y a todos los bloqueos de número se les asigna un IRQL. Los IRQL de bloqueo de número siempre son mayores o iguales que el nivel de DPC, pero esto no es cierto para los subprocesos. Sin embargo, un subproceso que contiene un bloqueo de número debe mantener un IRQL mayor o igual que el del bloqueo de número. Reducir el IRQL del subproceso por debajo del nivel IRQL del bloqueo de número que contiene permite programar otro subproceso en el procesador. Este nuevo subproceso podría intentar adquirir el mismo bloqueo de número.

Resolución

Asegúrese de que no adquiere recursivamente el bloqueo. Además, en el caso de los subprocesos que contienen un bloqueo de número, asegúrese de no reducir el IRQL de subproceso a un nivel por debajo del IRQL del bloqueo de número que contiene.