断続的にデッドロックする COM+ アプリケーションのトラブルシューティングを試みています。前回ロックアップしたとき、dllhost プロセスのユーザーモード ダンプを取得し、WinDbg を使用して分析することができました。すべてのスレッドとロックを調べた後、このスレッドが所有するクリティカル セクションにすべてが要約されます。
ChildEBP RetAddr Args to Child
0deefd00 7c822114 77e6bb08 000004d4 00000000 ntdll!KiFastSystemCallRet
0deefd04 77e6bb08 000004d4 00000000 0deefd48 ntdll!ZwWaitForSingleObject+0xc
0deefd74 77e6ba72 000004d4 00002710 00000000 kernel32!WaitForSingleObjectEx+0xac
0deefd88 75bb22b9 000004d4 00002710 00000000 kernel32!WaitForSingleObject+0x12
0deeffb8 77e660b9 000a5cc0 00000000 00000000 comsvcs!PingThread+0xf6
0deeffec 00000000 75bb21f1 000a5cc0 00000000 kernel32!BaseThreadStart+0x34
待機しているオブジェクトはイベントです。
0:016> !handle 4d4 f
Handle 000004d4
Type Event
Attributes 0
GrantedAccess 0x1f0003:
Delete,ReadControl,WriteDac,WriteOwner,Synch
QueryState,ModifyState
HandleCount 2
PointerCount 4
Name <none>
No object specific information available
私が知る限り、イベントが通知されることはなく、スレッドがハングし、プロセス内の他のいくつかのスレッドが停止します。何が起こっているのかを理解するための次のステップについて何か提案はありますか?
メソッドが PingThread と呼ばれているのを見て、既にデッドロックされているプロセス内の別のスレッドに ping を実行しようとしている可能性はありますか?
更新
これは、実際には Oracle 10.2.0.1 クライアントのバグであることが判明しました。とはいえ、オラクルのバグデータベースでバグを見つけることなく、どうやってこれを理解できたのかというアイデアにはまだ興味があります.