internet-explorerwindbgactivex-documents

Click a button in a Out-of-process COM(Active Document Server) component hangs IE, why?


Here is the problem: I developed a active document server and used it in IE. The active Document has a button called 'work', when click it, it works for about 3 seconds. During this time, I cannot use IE in any way. Like switch tab or close tab. My question is: the button is in a component in the com object in another process, why it hang IE? If I suspend the com server using ProcessXP or WinDBG, then IE will never react until the com server is resumed. I got IE's stack in below, both two of iexplore.exe. any one an tell me what IE is waiting for? Develop enviroment: Win server 2008 standard 64 bit/IE 8 32bit

Main iexplore.exe:

0:009> ~*k
0  Id: 1140.d4c Suspend: 1 Teb: 00000000`7efdb000 Unfrozen
Child-SP          RetAddr           Call Site
00000000`0011dca8 00000000`7513ab53 wow64win!NtUserPeekMessage+0xa
00000000`0011dcb0 00000000`7518cf87 wow64win!whNtUserPeekMessage+0x37
00000000`0011dd20 00000000`7511276d wow64!Wow64SystemServiceEx+0xd7
00000000`0011e5e0 00000000`7518d07e wow64cpu!TurboDispatchJumpAddressEnd+0x24
00000000`0011e6a0 00000000`7518c549 wow64!RunCpuSimulation+0xa
00000000`0011e6f0 00000000`774d84c8 wow64!Wow64LdrpInitialize+0x429
00000000`0011ec40 00000000`774d7623 ntdll!LdrpInitializeProcess+0x17e2
00000000`0011f140 00000000`774c308e ntdll! ?? ::FNODOBFM::`string'+0x2bea0
00000000`0011f1b0 00000000`00000000 ntdll!LdrInitializeThunk+0xe

   1  Id: 1140.10f8 Suspend: 1 Teb: 00000000`7efd8000 Unfrozen
Child-SP          RetAddr           Call Site
00000000`0283e998 00000000`7511282c wow64cpu!CpupSyscallStub+0x9
00000000`0283e9a0 00000000`7518d07e wow64cpu!WaitForMultipleObjects32+0x32
00000000`0283ea60 00000000`7518c549 wow64!RunCpuSimulation+0xa
00000000`0283eab0 00000000`7750d177 wow64!Wow64LdrpInitialize+0x429
00000000`0283f000 00000000`774c308e ntdll! ?? ::FNODOBFM::`string'+0x2bfe4
00000000`0283f070 00000000`00000000 ntdll!LdrInitializeThunk+0xe

   2  Id: 1140.1298 Suspend: 1 Teb: 00000000`7ef9d000 Unfrozen
Child-SP          RetAddr           Call Site
00000000`0288e968 00000000`7511282c wow64cpu!CpupSyscallStub+0x9
00000000`0288e970 00000000`7518d07e wow64cpu!WaitForMultipleObjects32+0x32
00000000`0288ea30 00000000`7518c549 wow64!RunCpuSimulation+0xa
00000000`0288ea80 00000000`7750d177 wow64!Wow64LdrpInitialize+0x429
00000000`0288efd0 00000000`774c308e ntdll! ?? ::FNODOBFM::`string'+0x2bfe4
00000000`0288f040 00000000`00000000 ntdll!LdrInitializeThunk+0xe

   3  Id: 1140.13d0 Suspend: 1 Teb: 00000000`7ef9a000 Unfrozen
Child-SP          RetAddr           Call Site
00000000`029eec28 00000000`7511282c wow64cpu!CpupSyscallStub+0x9
00000000`029eec30 00000000`7518d07e wow64cpu!WaitForMultipleObjects32+0x32
00000000`029eecf0 00000000`7518c549 wow64!RunCpuSimulation+0xa
00000000`029eed40 00000000`7750d177 wow64!Wow64LdrpInitialize+0x429
00000000`029ef290 00000000`774c308e ntdll! ?? ::FNODOBFM::`string'+0x2bfe4
00000000`029ef300 00000000`00000000 ntdll!LdrInitializeThunk+0xe

   4  Id: 1140.e64 Suspend: 1 Teb: 00000000`7ef97000 Unfrozen
Child-SP          RetAddr           Call Site
00000000`02b6f0f8 00000000`7511282c wow64cpu!CpupSyscallStub+0x9
00000000`02b6f100 00000000`7518d07e wow64cpu!WaitForMultipleObjects32+0x32
00000000`02b6f1c0 00000000`7518c549 wow64!RunCpuSimulation+0xa
00000000`02b6f210 00000000`7750d177 wow64!Wow64LdrpInitialize+0x429
00000000`02b6f760 00000000`774c308e ntdll! ?? ::FNODOBFM::`string'+0x2bfe4
00000000`02b6f7d0 00000000`00000000 ntdll!LdrInitializeThunk+0xe

   5  Id: 1140.3b0 Suspend: 1 Teb: 00000000`7ef91000 Unfrozen
Child-SP          RetAddr           Call Site
00000000`0292ee08 00000000`75112bcd wow64cpu!CpupSyscallStub+0x9
00000000`0292ee10 00000000`7518d07e wow64cpu!Thunk0ArgReloadState+0x1a
00000000`0292eed0 00000000`7518c549 wow64!RunCpuSimulation+0xa
00000000`0292ef20 00000000`7750d177 wow64!Wow64LdrpInitialize+0x429
00000000`0292f470 00000000`774c308e ntdll! ?? ::FNODOBFM::`string'+0x2bfe4
00000000`0292f4e0 00000000`00000000 ntdll!LdrInitializeThunk+0xe

   6  Id: 1140.1290 Suspend: 1 Teb: 00000000`7ef8b000 Unfrozen
Child-SP          RetAddr           Call Site
00000000`02bdf088 00000000`7511282c wow64cpu!CpupSyscallStub+0x9
00000000`02bdf090 00000000`7518d07e wow64cpu!WaitForMultipleObjects32+0x32
00000000`02bdf150 00000000`7518c549 wow64!RunCpuSimulation+0xa
00000000`02bdf1a0 00000000`7750d177 wow64!Wow64LdrpInitialize+0x429
00000000`02bdf6f0 00000000`774c308e ntdll! ?? ::FNODOBFM::`string'+0x2bfe4
00000000`02bdf760 00000000`00000000 ntdll!LdrInitializeThunk+0xe

   7  Id: 1140.c80 Suspend: 1 Teb: 00000000`7ef79000 Unfrozen
Child-SP          RetAddr           Call Site
00000000`0474e7c8 00000000`751aa2df ntdll!NtWaitForWorkViaWorkerFactory+0xa
00000000`0474e7d0 00000000`7518cf87 wow64!whNtWaitForWorkViaWorkerFactory+0x23
00000000`0474e820 00000000`7511276d wow64!Wow64SystemServiceEx+0xd7
00000000`0474f0e0 00000000`7518d07e wow64cpu!TurboDispatchJumpAddressEnd+0x24
00000000`0474f1a0 00000000`7518c549 wow64!RunCpuSimulation+0xa
00000000`0474f1f0 00000000`7750d177 wow64!Wow64LdrpInitialize+0x429
00000000`0474f740 00000000`774c308e ntdll! ?? ::FNODOBFM::`string'+0x2bfe4
00000000`0474f7b0 00000000`00000000 ntdll!LdrInitializeThunk+0xe

   8  Id: 1140.17f0 Suspend: 1 Teb: 00000000`7efd5000 Unfrozen
Child-SP          RetAddr           Call Site
00000000`036ce5e8 00000000`751aa2df ntdll!NtWaitForWorkViaWorkerFactory+0xa
00000000`036ce5f0 00000000`7518cf87 wow64!whNtWaitForWorkViaWorkerFactory+0x23
00000000`036ce640 00000000`7511276d wow64!Wow64SystemServiceEx+0xd7
00000000`036cef00 00000000`7518d07e wow64cpu!TurboDispatchJumpAddressEnd+0x24
00000000`036cefc0 00000000`7518c549 wow64!RunCpuSimulation+0xa
00000000`036cf010 00000000`7750d177 wow64!Wow64LdrpInitialize+0x429
00000000`036cf560 00000000`774c308e ntdll! ?? ::FNODOBFM::`string'+0x2bfe4
00000000`036cf5d0 00000000`00000000 ntdll!LdrInitializeThunk+0xe

#  9  Id: 1140.d44 Suspend: 1 Teb: 00000000`7ef94000 Unfrozen
Child-SP          RetAddr           Call Site
00000000`0337faa8 00000000`77588638 ntdll!DbgBreakPoint
00000000`0337fab0 00000000`774f39cb ntdll!DbgUiRemoteBreakin+0x38
00000000`0337fae0 00000000`00000000 ntdll!RtlUserThreadStart+0x25

child process which contains the com component:

0:009> ~*k

   0  Id: 10fc.76c Suspend: 1 Teb: 00000000`7efdb000 Unfrozen
Child-SP          RetAddr           Call Site
00000000`001ae708 00000000`7511282c wow64cpu!CpupSyscallStub+0x9
00000000`001ae710 00000000`7518d07e wow64cpu!WaitForMultipleObjects32+0x32
00000000`001ae7d0 00000000`7518c549 wow64!RunCpuSimulation+0xa
00000000`001ae820 00000000`774d84c8 wow64!Wow64LdrpInitialize+0x429
00000000`001aed70 00000000`774d7623 ntdll!LdrpInitializeProcess+0x17e2
00000000`001af270 00000000`774c308e ntdll! ?? ::FNODOBFM::`string'+0x2bea0
00000000`001af2e0 00000000`00000000 ntdll!LdrInitializeThunk+0xe

   1  Id: 10fc.d18 Suspend: 1 Teb: 00000000`7efd8000 Unfrozen
Child-SP          RetAddr           Call Site
00000000`005befb8 00000000`7511282c wow64cpu!CpupSyscallStub+0x9
00000000`005befc0 00000000`7518d07e wow64cpu!WaitForMultipleObjects32+0x32
00000000`005bf080 00000000`7518c549 wow64!RunCpuSimulation+0xa
00000000`005bf0d0 00000000`7750d177 wow64!Wow64LdrpInitialize+0x429
00000000`005bf620 00000000`774c308e ntdll! ?? ::FNODOBFM::`string'+0x2bfe4
00000000`005bf690 00000000`00000000 ntdll!LdrInitializeThunk+0xe

   2  Id: 10fc.c70 Suspend: 1 Teb: 00000000`7ef9d000 Unfrozen
Child-SP          RetAddr           Call Site
00000000`027ced18 00000000`7511282c wow64cpu!CpupSyscallStub+0x9
00000000`027ced20 00000000`7518d07e wow64cpu!WaitForMultipleObjects32+0x32
00000000`027cede0 00000000`7518c549 wow64!RunCpuSimulation+0xa
00000000`027cee30 00000000`7750d177 wow64!Wow64LdrpInitialize+0x429
00000000`027cf380 00000000`774c308e ntdll! ?? ::FNODOBFM::`string'+0x2bfe4
00000000`027cf3f0 00000000`00000000 ntdll!LdrInitializeThunk+0xe

   3  Id: 10fc.90c Suspend: 1 Teb: 00000000`7ef9a000 Unfrozen
Child-SP          RetAddr           Call Site
00000000`02a2eb58 00000000`7511282c wow64cpu!CpupSyscallStub+0x9
00000000`02a2eb60 00000000`7518d07e wow64cpu!WaitForMultipleObjects32+0x32
00000000`02a2ec20 00000000`7518c549 wow64!RunCpuSimulation+0xa
00000000`02a2ec70 00000000`7750d177 wow64!Wow64LdrpInitialize+0x429
00000000`02a2f1c0 00000000`774c308e ntdll! ?? ::FNODOBFM::`string'+0x2bfe4
00000000`02a2f230 00000000`00000000 ntdll!LdrInitializeThunk+0xe

   4  Id: 10fc.12ac Suspend: 1 Teb: 00000000`7ef97000 Unfrozen
Child-SP          RetAddr           Call Site
00000000`029eed58 00000000`75112d92 wow64cpu!CpupSyscallStub+0x9
00000000`029eed60 00000000`7518d07e wow64cpu!Thunk0Arg+0x5
00000000`029eee20 00000000`7518c549 wow64!RunCpuSimulation+0xa
00000000`029eee70 00000000`7750d177 wow64!Wow64LdrpInitialize+0x429
00000000`029ef3c0 00000000`774c308e ntdll! ?? ::FNODOBFM::`string'+0x2bfe4
00000000`029ef430 00000000`00000000 ntdll!LdrInitializeThunk+0xe

   5  Id: 10fc.b6c Suspend: 1 Teb: 00000000`7efd5000 Unfrozen
Child-SP          RetAddr           Call Site
00000000`031de438 00000000`7513ac48 wow64win!ZwUserGetMessage+0xa
00000000`031de440 00000000`7518cf87 wow64win!whNtUserGetMessage+0x30
00000000`031de4a0 00000000`7511276d wow64!Wow64SystemServiceEx+0xd7
00000000`031ded60 00000000`7518d07e wow64cpu!TurboDispatchJumpAddressEnd+0x24
00000000`031dee20 00000000`7518c549 wow64!RunCpuSimulation+0xa
00000000`031dee70 00000000`7750d177 wow64!Wow64LdrpInitialize+0x429
00000000`031df3c0 00000000`774c308e ntdll! ?? ::FNODOBFM::`string'+0x2bfe4
00000000`031df430 00000000`00000000 ntdll!LdrInitializeThunk+0xe

   6  Id: 10fc.15fc Suspend: 1 Teb: 00000000`7ef8b000 Unfrozen
Child-SP          RetAddr           Call Site
00000000`0295e938 00000000`75112bcd wow64cpu!CpupSyscallStub+0x9
00000000`0295e940 00000000`7518d07e wow64cpu!Thunk0ArgReloadState+0x1a
00000000`0295ea00 00000000`7518c549 wow64!RunCpuSimulation+0xa
00000000`0295ea50 00000000`7750d177 wow64!Wow64LdrpInitialize+0x429
00000000`0295efa0 00000000`774c308e ntdll! ?? ::FNODOBFM::`string'+0x2bfe4
00000000`0295f010 00000000`00000000 ntdll!LdrInitializeThunk+0xe

   7  Id: 10fc.16f4 Suspend: 1 Teb: 00000000`7ef7f000 Unfrozen
Child-SP          RetAddr           Call Site
00000000`0390edb8 00000000`75112bcd wow64cpu!CpupSyscallStub+0x9
00000000`0390edc0 00000000`7518d07e wow64cpu!Thunk0ArgReloadState+0x1a
00000000`0390ee80 00000000`7518c549 wow64!RunCpuSimulation+0xa
00000000`0390eed0 00000000`7750d177 wow64!Wow64LdrpInitialize+0x429
00000000`0390f420 00000000`774c308e ntdll! ?? ::FNODOBFM::`string'+0x2bfe4
00000000`0390f490 00000000`00000000 ntdll!LdrInitializeThunk+0xe

   8  Id: 10fc.fb0 Suspend: 1 Teb: 00000000`7ef94000 Unfrozen
Child-SP          RetAddr           Call Site
00000000`0366e138 00000000`751aa2df ntdll!NtWaitForWorkViaWorkerFactory+0xa
00000000`0366e140 00000000`7518cf87 wow64!whNtWaitForWorkViaWorkerFactory+0x23
00000000`0366e190 00000000`7511276d wow64!Wow64SystemServiceEx+0xd7
00000000`0366ea50 00000000`7518d07e wow64cpu!TurboDispatchJumpAddressEnd+0x24
00000000`0366eb10 00000000`7518c549 wow64!RunCpuSimulation+0xa
00000000`0366eb60 00000000`7750d177 wow64!Wow64LdrpInitialize+0x429
00000000`0366f0b0 00000000`774c308e ntdll! ?? ::FNODOBFM::`string'+0x2bfe4
00000000`0366f120 00000000`00000000 ntdll!LdrInitializeThunk+0xe

#  9  Id: 10fc.c5c Suspend: 1 Teb: 00000000`7ef91000 Unfrozen
Child-SP          RetAddr           Call Site
00000000`036cf748 00000000`77588638 ntdll!DbgBreakPoint
00000000`036cf750 00000000`774f39cb ntdll!DbgUiRemoteBreakin+0x38
00000000`036cf780 00000000`00000000 ntdll!RtlUserThreadStart+0x25

Any advice is welcomed! thanks


Solution

  • You may be able to identify the threads that are hung by running:

    !analyze -hang
    

    or better:

    !locks
    

    this will take some time, however, looking at your call stacks you components show threads that are waiting for multiple objects so are the events they are waiting for ever signalled correctly? You should be able to check your code and follow the logic.

    Also you have NtWaitForWorkViaWorkerFactory I don't know what this does but it is also something worth checking out.