Bagikan melalui


Kesalahan dalam Menangani Operasi Pembersihan dan Penutupan

Beberapa driver gagal membedakan tugas yang diperlukan dalam rutinitas DispatchCleanup dan DispatchClose . Manajer I/O memanggil rutinitas DispatchCleanup driver ketika handel terakhir ke objek file ditutup. Rutinitas DispatchClose dipanggil ketika referensi terakhir dirilis dari objek file. Driver tidak boleh mencoba membebaskan sumber daya dalam rutinitas DispatchCleanup yang dilampirkan ke objek file atau mungkin digunakan oleh rutinitas DispatchXxx lainnya.

Saat memanggil rutinitas pengiriman, manajer I/O menyimpan referensi ke objek file untuk panggilan I/O normal. Akibatnya, driver dapat menerima permintaan I/O untuk objek file setelah rutinitas DispatchCleanup dipanggil tetapi sebelum rutinitas DispatchClose-nya dipanggil. Misalnya, pemanggil mode pengguna mungkin menutup handel file saat permintaan manajer I/O sedang berlangsung dari utas lain. Jika driver telah menghapus atau membebaskan sumber daya yang diperlukan sebelum manajer I/O memanggil rutinitas DispatchClose , referensi pointer yang tidak valid dan masalah lainnya dapat terjadi.