落ちてくれないJavaSHIORI(解決編)
‥‥なんとか原因判明。やっと落ちてくれました‥‥orz。
とりあえずは、ExitThreadの最後の方を参照。DLLのアタッチ・デタッチ処理が動いている間、そのプロセスで動くことの出来るスレッドは一つしか許されない、というのが今回のトラブルの原因です。
JavaVMは、ただ起動しているだけでも常に3−4つ程スレッドを起動します。私は当初、JavaVMをDLLデタッチタイミングで解放するように記述していました。で、JavaVMの終了処理を起動しようとすると当然スレッド切り替えが発生します。が、実際にはDLLデタッチ中と言うことでスレッド切り替えがブロックされてしまいます。
‥‥そしてデッドロックという悲しい結果に(涙)。あー、多分判っている人は当然判ってるんでしょうけど、リソースの取得・取得処理はload/unloadイベントの時に全部行いましょう、という話でした。えぐえぐ。