Windows 2000のwinmm.dll にハンドルリークのバグがあることが判明

リーク条件
・Windows 32 アプリケーション (コンソールアプリでは発生しない)

・発生する関数は以下の通り
joyGetDevCapsA
joyGetDevCapsW
joyGetPos
joyGetPosEx
joyGetThreshold
joySetThreshold
joySetCapture

・WinXP のDLLを使うとリークしない
(ただし、XPのDLLを使うと mci系関数がすべて死ぬので置き換えはできない)

・JoyStickがつながっていれば発生しない

・プロセスがJoyStick の該当関数をよんだ後、 JoyStick を抜いても発生しない

症状
呼び出すと毎秒1つずつハンドルがリークする

原因
DINPUT.DLL の DirectInputCreateW を呼び出して、別スレッドで処理する部分にバグがあると思われる

2日間ほど解析してみて、分かったのはここまで・ω・

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です