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日間ほど解析してみて、分かったのはここまで・ω・
Comments