간헐적으로 교착 상태가되는 COM + 응용 프로그램의 문제를 해결하려고합니다. 마지막으로 잠겨있을 때, 나는 dllhost 프로세스의 usermode 덤프를 가져 와서 WinDbg를 사용하여 분석 할 수있었습니다. 모든 스레드와 잠금을 검사 한 후, 모두가이 스레드가 소유 한 임계 영역에 종기가 : 지금까지 내가 말할 수있는COM + 응용 프로그램 데드락 문제 해결
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
:
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
가에 기다리고 개체 이벤트입니다 , 이벤트가 신호를받지 못하게되어 스레드가 멈추고 프로세스의 다른 여러 스레드를 보류하게됩니다. 아무도 무슨 일이 일어나고 있는지 알아 내려고 다음 단계에 대한 제안이 있습니까?
이제 메소드가 PingThread라고 불리는데, 이미 교착 상태에있는 프로세스의 다른 스레드에 대해 ping을 시도 할 가능성이 있습니까?
이 실제로 오라클 10.2.0.1 클라이언트의 버그로 밝혀졌다
UPDATE. 비록 오라클의 버그 데이터베이스에서 버그를 발견하지 않고서 어떻게 해결할 수 있었는지에 대한 아이디어에 여전히 관심이 있습니다.