psqlodbcのMSDTC対応シミュレーション

前回記載のITransactionResourceAsyncオブジェクトの早死に問題をもう少し追いかけてみた。今回はITransactionReourceAsyncオブジェクトを正式にCOMを通してCoCreateInstanceで作成した。更に念には念を入れてCoLoadLibraryも呼び出してみた。しかし残念ながら状況は変わらなかった。やはりCommitRequestを受け取ってからCommitReuestDoneを返す前にDllがdetachされることがあるのである。私のテストケースの場合、CommitRequestの処理をわざと長く時間(2秒)をかけて行っているためにかなり高い再現性がある。今のところオブジェクトを長生きさせる方法を他に思いつかない。インプロセスでなくアウトプロセスオブジェクトにすれば対応は可能だと思うがこれまたしんどい話だし、どこかにそう書いてあるのだろうか? そもそもこの早死にありはバグなのだろうか? それとも仕様なのだろうか? 一旦CommitRequestが発行されれば基本的にcommitをする以外にないのだから、ごく稀におかしくなりうるとしてもリカバリーすればそれでいいじゃん..という考え方なのであろうか。