MSIMEの罠

  • BaseNamedObjectsMSIME.hotkey.mutex_S-1-5-21-527237240-515967899-682003330-1003
  • BaseNamedObjectsMSIME.shareddata.mutex_S-1-5-21-527237240-515967899-682003330-1003

これは本日約2時間ほど時間を無駄にした原因。
具体的に言うと、ウィンドウを生成するたびにMSIMEの手によって勝手に差し込まれてくるmutexです。
※mutex:OSから提供されている機能の一つ、同期によく使われる。

といっても、他所からを差し込まれてくるのは日常茶飯事なので”これだけ”なら問題ありません。
なら何が問題なのかというと、勝手に差し込んでくるくせに「自動的に開放されない」ことです。

この画像を見てください。

これはハンドルの一覧表示させたものですが、見事にMSIMEのmutexで埋まっているのがわかります。
サイズの都合でこれしか映ってませんが、合計200ほどハンドルリークしていました。
何をやったのかといえば、ウィンドウの生成→破棄を100回繰り返しただけで他になんらおかしいことはしていません。

前回日記で書いたWindowModeSelecterにバグを見つけて書き直している途中にさらにハンドルリークしている事を見つけ
きちんと直してみてもまだリークしていたため他にもあるのかと約三時間ほどタスクマネージャーのハンドル数とにらめっこしていたわけです。
原因が判明してみれば上記の通り、MSIMEの物と思われるimjpcic.dllがCreateWindow関数実行時に自動生成するmutexが開放されず居残っているという物でした。
環境による物なのか、それともIMEの仕様なのかはわかりませんがはた迷惑なことこの上ない……

無駄に過ごした2時間返せよ!!