Bagikan melalui


0xF Pemeriksaan Bug: SPIN_LOCK_ALREADY_OWNED

Pemeriksaan bug SPIN_LOCK_ALREADY_OWNED memiliki nilai 0x0000000F. Ini menunjukkan bahwa permintaan untuk kunci putaran telah dimulai ketika kunci putar sudah dimiliki.

Penting

Artikel ini untuk programmer. Jika Anda adalah pelanggan yang telah menerima kode kesalahan layar biru saat menggunakan komputer Anda, lihat Memecahkan masalah kesalahan layar biru.

Parameter SPIN_LOCK_ALREADY_OWNED

Tidak ada

Penyebab

Biasanya, kesalahan ini disebabkan oleh permintaan rekursif untuk kunci putaran. Ini juga dapat terjadi jika sesuatu yang mirip dengan permintaan rekursif untuk kunci putaran telah dimulai --misalnya, ketika kunci spin telah diperoleh oleh utas, dan kemudian utas yang sama memanggil fungsi, yang juga mencoba memperoleh kunci putaran. Upaya kedua untuk memperoleh kunci putaran tidak diblokir dalam kasus ini karena melakukannya akan mengakibatkan kebuntuan yang tidak dapat dipulihkan. Jika panggilan dilakukan pada lebih dari satu prosesor, maka satu prosesor akan diblokir sampai prosesor lain melepaskan kunci.

Kesalahan ini juga dapat terjadi, tanpa rekursi eksplisit, ketika semua utas dan semua kunci spin diberi IRQL. IRQL kunci putar selalu lebih besar dari atau sama dengan tingkat DPC, tetapi ini tidak berlaku untuk utas. Namun, utas yang memegang kunci putaran harus mempertahankan IRQL yang lebih besar dari atau sama dengan kunci putar. Mengurangi IRQL utas di bawah tingkat IRQL kunci putar yang dipegangnya memungkinkan utas lain dijadwalkan pada prosesor. Utas baru ini kemudian dapat mencoba untuk memperoleh kunci spin yang sama.

Resolusi

Pastikan Anda tidak memperoleh kunci secara rekursif. Dan, untuk utas yang memegang kunci spin, pastikan Anda tidak mengurangi thread IRQL ke tingkat di bawah IRQL kunci spin yang dipegangnya.