Filter Control Mutex di AVStream

Setiap instans filter AVStream memiliki mutex kontrol filter terkait. Mutex ini digunakan untuk menyinkronkan akses ke hierarki objek dari filter ke bawah ke pin individual. Pembuatan dan penghancuran filter dan pin disinkronkan dengan mutex ini.

Hierarki objek dijamin stabil hanya dari instans filter tertentu ke bawah saat mutex kontrol filter ditahan. Dengan demikian, minidriver harus mendapatkan mutex kontrol filter sebelum melintasi hierarki objek di bawah tingkat filter menggunakan fungsi KsXxxGetFirstChildXxx dan KsXxxGetNextSiblingXxx .

Mutex kontrol filter juga digunakan untuk menyinkronkan transisi status.

AVStream mendapatkan mutex kontrol filter saat menangani properti yang mengharuskan hierarki tetap stabil, seperti saat melakukan modifikasi deskriptor.

Ketahuilah bahwa mutex kontrol filter tunggal digunakan untuk hierarki objek di bawah setiap filter individual. Ini berarti bahwa objek pin menggunakan mutex kontrol filter induknya saat minidriver memanggil fungsi dengan objek pin.

AVStream memegang mutex kontrol filter atas nama minidriver saat memanggil rutinitas yang disediakan minidriver berikut:

Mirip dengan mutex perangkat, mutex kontrol filter tidak boleh diperoleh secara rekursif. Jika, misalnya, AVStream melakukan panggilan balik ke minidriver untuk membuat pengiriman dalam konteks utas A, dan minidriver kemudian mencoba untuk mendapatkan mutex dari dalam utas A, utas Kebuntuan dengan sendirinya.

Kebuntuan dapat terjadi jika Anda melakukan salah satu tindakan berikut:

  • Cobalah untuk memperoleh mutex kontrol filter dari dalam rutinitas proses.

  • Cobalah untuk mendapatkan mutex kontrol filter dari dalam panggilan balik Tidur atau Bangun.

Untuk memanipulasi mutex kontrol filter, gunakan fungsi berikut:

KsAcquireControl, KsFilterAcquireControl, KsPinAcquireControl, KsReleaseControl, KsFilterReleaseControl, KsPinReleaseControl