(σ゚∀゚)σ
(σ゚∀゚)σ
這幾天在修 warning,才真正碰到 windows 討厭的地方 (講得好像以前不討厭一樣)
(σ゚∀゚)σ
一開始是看到有一條 warning 說有一個 local variable 和 member variable 撞名
這個 warning 在整份 code 中蠻常見的,他就是要提醒說在用到的時候會是拿到 local variable,不會拿到 member variable
所以本來我也沒有很在意 (
(σ゚∀゚)σ
但我戳過去那行 code 後發現我沒有找到相對應的 member variable
這就很奇怪了 (#
(σ゚∀゚)σ
結果看了之後發現那行 code 本來要拿 lock
因為不知道在寫三小其實沒有拿到 lock
原本應該是要用 member variable 去拿 lock
結果因為寫錯了,那個變數就被判成 local variable了 (?????
(是說這樣寫居然不會 compile error ....
(σ゚∀゚)σ
順便記錄一下
如果有個 class 叫 A
A a; 和 A (a) 是完全一樣的意思
都是宣告一個 class A 的 object,constructor 是 default constructor
(σ゚∀゚)σ
順便抱怨一下
就是說我們拿 lock 那個 class 居然有設奇怪的 default constructor....
(σ゚∀゚)σ
好吧所以我就把 lock 加回去了,結果跑 test 沒有過
具體來說是卡住了
(σ゚∀゚)σ
我本來以為是 deadlock
但找了許久都沒有找到會 deadlock 的地方
其實這時候應該要先去看 test aborted 的原因的
應該會看到是因為 BSOD....
(σ゚∀゚)σ
這邊又卡了很久,我真的沒有想到是因為 windows API 在錯誤的時候被摳會 BSOD...
(σ゚∀゚)σ
總之就是我們拿 lock 的時候會把 IRQL (intterupt request level) 設成 APC level
但我們在拿著 lock 的同時會去 call 一些只能在 passive level call 的 windows API
所以就壞了
(σ゚∀゚)σ
但那邊的確是需要拿 lock 的
所以現在還在努力...
我原本想應該把會造成 BSOD 的那個 function 拔掉就可以
(有特別看過那邊照理說不需要做這件事啊...)
但又 BSOD
那就感覺是我們有一些邏輯沒有設計好,可能 destroy 後又做事
但這要確認又要看很久,目前在試著用比較不治本的解法...
(σ゚∀゚)σ
試著只鎖該鎖的部分 ing (
(σ゚∀゚)σ
真的要說我每天上班都蠻厭世的 (抹臉
載入新的回覆