Microsoft KB Archive/319579

= COM Activity Deadlock Causes IIS to Stop Responding =

Article ID: 319579

Article Last Modified on 8/15/2002

-

APPLIES TO


 * Microsoft COM+ 1.0

-



This article was previously published under Q319579



SYMPTOMS
Synchronization of COM activities for single-threaded apartment (STA) components does not work properly for COM+ hotfixes earlier than Microsoft Windows 2000 Post-Service Pack 2 (SP2) COM+ hotfix rollup package 14. When you restart a program, Active Server Pages (ASP) may stop responding (hang).



CAUSE
Internet Information Services (IIS) waits for ASP requests, which result in a call to the COM component, to complete.



RESOLUTION
To resolve this problem, obtain the latest service pack for Windows 2000. For additional information, click the following article number to view the article in the Microsoft Knowledge Base:

260910 How to Obtain the Latest Windows 2000 Service Pack



STATUS
Microsoft has confirmed that this is a problem in the Microsoft products that are listed at the beginning of this article. This problem was first fixed in COM+ hotfix 14. Later COM+ hotfixes will also contain the fix for this problem. This problem was first corrected in Windows 2000 Service Pack 3.



MORE INFORMATION
Thread reentrancy on the STA thread can create a deadlock opportunity when one thread calls out of an STA while COM holds the activity lock, and another thread calls in to the STA and waits for the lock. Because the call that holds the lock is lower on the stack, it can never complete and release the lock.

The following is a sample stack of the problem. Note that the stack is specific to a particular customer component. ChildEBP RetAddr Args to Child

00dddac4 77e86dda 00000002 00dddaec 00000001 ntdll!NtWaitForMultipleObjects+0xb [i386\usrstubs.asm @ 1996] 00dddb14 77e1375e 00dddaec 00000001 00000000 KERNEL32!WaitForMultipleObjectsEx+0xea [D:\nt\private\windows\base\client\synch.c @ 1568] 00dddb70 77a52d04 00dddb3c 045218e0 ffffffff USER32!MsgWaitForMultipleObjectsEx+0x153 [F:\nt\private\ntos\w32\ntuser\client\client.c @ 1588] 00dddb98 77aad528 045218e0 ffffffff 00dddbf8 ole32!CCliModalLoop::BlockFn+0x80 [F:\nt\private\ole32\com\dcomrem\callctrl.cxx @ 1176] 00dddbfc 69537a4c 00000000 ffffffff 00000001 ole32!CoWaitForMultipleHandles+0xee [F:\nt\private\ole32\com\dcomrem\sync.cxx @ 101] 00dddc58 695376d4 045218b0 00000001 00dddd44 COMSVCS!CActivity::EnterActivity+0x1be [.\act.cpp @ 280] 00dddc68 77aa8d4f 045218a0 00dddd44 00dddda0 COMSVCS!CActivity::Enter+0x14 [.\act.cpp @ 200] 00dddc98 77aa8e67 00000020 00000002 00dddda0 ole32!CPolicySet::DeliverEvents+0x26d [F:\nt\private\ole32\com\dcomrem\pstable.cxx @ 2431] 00dddd24 77ab0962 00dddd44 00000002 00dddda0 ole32!CPolicySet::Notify+0x338 [F:\nt\private\ole32\com\dcomrem\pstable.cxx @ 2091] 00dddd70 77ab087c 00074db0 00085a28 77ad8f3f ole32!EnterForCallback+0x60 [F:\nt\private\ole32\com\dcomrem\crossctx.cxx @ 1741] 00ddde90 77aad8b8 00085a28 77ad8f3f 00ddded8 ole32!SwitchForCallback+0xe8 [F:\nt\private\ole32\com\dcomrem\crossctx.cxx @ 1639] 00dddeb8 77ad8f9b 00085a28 77ad8f3f 00ddded8 ole32!PerformCallback+0x50 [F:\nt\private\ole32\com\dcomrem\crossctx.cxx @ 1559] 00dddee4 77ac4ba6 00000010 00000000 00000000 ole32!CStdMarshal::DisconnectAndRelease+0x42 [F:\nt\private\ole32\com\dcomrem\marshal.cxx @ 2863] 00dddfcc 77d447d8 0009fdd0 00000014 02af5038 ole32!CRemoteUnknown::RundownOid+0x18b [F:\nt\private\ole32\com\dcomrem\remoteu.cxx @ 1279] 00dddff0 77da2586 77aa3056 00dde194 00000004 RPCRT4!Invoke+0x30 [..\i386\stubless.asm @ 88] 00dde3ec 77da3273 000a5398 000a9d7c 02a7e128 RPCRT4!NdrStubCall2+0x63d [D:\nt\private\rpc\ndr20\srvcall.c @ 1724] 00dde450 77b2a05e 000a5398 02a7e128 000a9d7c RPCRT4!CStdStubBuffer_Invoke+0xec [D:\nt\private\rpc\ndr20\stub.c @ 1571] 00dde494 77b2ac98 02a7e128 00083ba4 00000000 ole32!SyncStubInvoke+0x61 [F:\nt\private\ole32\com\dcomrem\channelb.cxx @ 1136] 00dde4dc 77aa427e 02a7e128 000a8820 000a5398 ole32!StubInvoke+0xa8 [F:\nt\private\ole32\com\dcomrem\channelb.cxx @ 1334] 00dde540 77aa41c3 000a9d7c 00000000 000a5398 ole32!CCtxComChnl::ContextInvoke+0xbb F:\nt\private\ole32\com\dcomrem\ctxchnl.cxx @ 1204] 00dde55c 77aa4bed 02a7e128 00000001 000a5398 ole32!MTAInvoke+0x18 [F:\nt\private\ole32\com\dcomrem\callctrl.cxx @ 1952] 00dde58c 77b2aba8 02a7e128 00000001 000a5398 ole32!STAInvoke+0x56 [F:\nt\private\ole32\com\dcomrem\callctrl.cxx @ 1770] 00dde5c0 77b2a98d 02a7e0e0 000a9d7c 000a5398 ole32!AppInvoke+0x88 [F:\nt\private\ole32\com\dcomrem\channelb.cxx @ 1008] 00dde680 77b2ae9a 02af5030 000008bc 00000000 ole32!ComInvokeWithLockAndIPID+0x282 [F:\nt\private\ole32\com\dcomrem\channelb.cxx @ 1578] 00dde6a0 77aa49f9 02a7e0e0 00dde78c 0000babe ole32!ComInvoke+0x41 [F:\nt\private\ole32\com\dcomrem\channelb.cxx @ 1391] 00dde6b0 77aa873d 02a7e0e0 00dde794 00dde6e0 ole32!ThreadDispatch+0x21 [F:\nt\private\ole32\com\dcomrem\chancont.cxx @ 334] 00dde6c0 77e12e98 000900c6 00000400 0000babe ole32!ThreadWndProc+0xe3 [F:\nt\private\ole32\com\dcomrem\chancont.cxx @ 565] 00dde6e0 77e130e0 77aa8717 000900c6 00000400 USER32!UserCallWinProc+0x18 [..\i386\callproc.asm @ 100] 00dde76c 77e1320f 00dde78c 00000000 77a59f7f USER32!DispatchMessageWorker+0x2d0 [F:\nt\private\ntos\w32\ntuser\client\clmsg.c @ 1695] 00dde778 77a59f7f 00dde78c 00000102 00dde894 USER32!DispatchMessageW+0xb [F:\nt\private\ntos\w32\ntuser\client\cltxt.h @ 879] 00dde7a8 77a52d2a 00dde894 02abceb0 00000000 ole32!CCliModalLoop::PeekRPCAndDDEMessage+0x49 [F:\nt\private\ole32\com\dcomrem\callctrl.cxx @ 1387] 00dde7bc 77aa577d 00dde7dc 000003e8 00dde7ec ole32!CCliModalLoop::BlockFn+0x5e [F:\nt\private\ole32\com\dcomrem\callctrl.cxx @ 1123] 00dde7e4 77b2b7f0 ffffffff 00dde858 02ad7330 ole32!ModalLoop+0x59 [F:\nt\private\ole32\com\dcomrem\chancont.cxx @ 201] 00dde804 77b2b684 00000001 02ad7330 00000000 ole32!ThreadSendReceive+0xd5 [F:\nt\private\ole32\com\dcomrem\channelb.cxx @ 4076] 00dde81c 77b2b512 00dde858 02ad7330 00dde894 ole32!CRpcChannelBuffer::SwitchAptAndDispatchCall+0x130 [F:\nt\private\ole32\com\dcomrem\channelb.cxx @ 3615] 00dde85c 77aa56bc 02ad7330 00dde998 00dde954 ole32!CRpcChannelBuffer::SendReceive2+0x96 [F:\nt\private\ole32\com\dcomrem\channelb.cxx @ 3327] 00dde874 77aa520d 00dde998 00dde954 02ad7330 ole32!CCliModalLoop::SendReceive+0x1c [F:\nt\private\ole32\com\dcomrem\callctrl.cxx @ 858] 00dde8d4 77aa518f 02ad7330 00dde998 00dde954 ole32!CAptRpcChnl::SendReceive+0x68 [F:\nt\private\ole32\com\dcomrem\callctrl.cxx @ 595] 00dde92c 77da350b 02ad7330 00dde998 00dde954 ole32!CCtxComChnl::SendReceive+0x121 [F:\nt\private\ole32\com\dcomrem\ctxchnl.cxx @ 720] 00dde948 77da2ef8 02e6b6fc 00dde9e4 0300002c RPCRT4!NdrProxySendReceive+0x4c [D:\nt\private\rpc\ndr20\proxy.c @ 1955] 00ddeb90 77da34a6 000902d0 0009045a 00ddebc4 RPCRT4!NdrClientCall2+0x52f [D:\nt\private\rpc\ndr20\cltcall.c @ 1447] 00ddebac 77d44ad0 0000000c 00000008 00ddee48 RPCRT4!ObjectStublessClient+0x76 [D:\nt\private\rpc\ndr20\i386\stblsclt.c @ 454] 00ddebbc 110cbbd6 02e6b6fc 00dded9c 00ddf8e0 RPCRT4!ObjectStubless+0xf [..\i386\stubless.asm @ 154] 00ddee48 779d7bcd 000ed678 00000009 00000000 pchmp!clsHMPReqScreen::WritePopUpQueryBox+0x1c86 [C:\Builds\4.2.3\pcHMP\clsHMPReqScreen.cls @ 3507] 00ddee84 6a9f9bdf 000ed678 00000044 00000004 OLEAUT32!tPushValJmpTab+0xf5 [D:\OA\src\dispatch\WIN32\i386\invoke.asm @ 340] 00ddf7e0 6a9f99d8 000ed678 110056f8 6003001e MSVBVM60!EpiInvokeMethod+0x1e1 00ddf83c 779e74cb 000ed678 6003001e 02d86b1c MSVBVM60!BASIC_CLASS_Invoke+0x52 00ddf874 779b24ac 000ed678 6003001e 02d86b1c OLEAUT32!IDispatch_Invoke_Stub+0x6b [D:\OA\src\dispatch\rpcallas.cpp @ 326] 00ddf8ac 77da261a 00ddf9c8 00000000 00000000 OLEAUT32!IDispatch_RemoteInvoke_Thunk+0x3c [D:\OA\rwin32\dcomoa.c @ 205] 00ddfb68 77da3273 02d613a8 02ad727c 00142d68 RPCRT4!NdrStubCall2+0x5dd [D:\nt\private\rpc\ndr20\srvcall.c @ 1688] 00ddfbcc 779e8cdf 02d613a8 00142d68 02ad727c RPCRT4!CStdStubBuffer_Invoke+0xec [D:\nt\private\rpc\ndr20\stub.c @ 1571] 00ddfbec 77b2a05e 02a6fce0 00142d68 02ad727c OLEAUT32!CStubWrapper::Invoke+0x9f [D:\OA\src\dispatch\rpcwrap.cpp @ 367] 00ddfc30 77b2ac98 00142d68 0009cd14 02ade6c8 ole32!SyncStubInvoke+0x61 [F:\nt\private\ole32\com\dcomrem\channelb.cxx @ 1136] 00ddfc78 77aa427e 00142d68 02d9a008 02a6fce0 ole32!StubInvoke+0xa8 [F:\nt\private\ole32\com\dcomrem\channelb.cxx @ 1334] 00ddfcdc 77aa41c3 02ad727c 00000000 02a6fce0 ole32!CCtxComChnl::ContextInvoke+0xbb [F:\nt\private\ole32\com\dcomrem\ctxchnl.cxx @ 1204] 00ddfcf8 77aa4bed 00142d68 00000001 02a6fce0 ole32!MTAInvoke+0x18 [F:\nt\private\ole32\com\dcomrem\callctrl.cxx @ 1952] 00ddfd28 77b2aba8 00142d68 00000001 02a6fce0 ole32!STAInvoke+0x56 [F:\nt\private\ole32\com\dcomrem\callctrl.cxx @ 1770] 00ddfd5c 77b2a98d 00142d20 02ad727c 02a6fce0 ole32!AppInvoke+0x88 [F:\nt\private\ole32\com\dcomrem\channelb.cxx @ 1008] 00ddfe1c 77b2ae9a 02d86b18 00000000 00000000 ole32!ComInvokeWithLockAndIPID+0x282 [F:\nt\private\ole32\com\dcomrem\channelb.cxx @ 1578] 00ddfe3c 77aa49f9 00142d20 02e8b794 0000babe ole32!ComInvoke+0x41 [F:\nt\private\ole32\com\dcomrem\channelb.cxx @ 1391] 00ddfe4c 77aa873d 00142d20 02e8b79c 00ddfe7c ole32!ThreadDispatch+0x21 [F:\nt\private\ole32\com\dcomrem\chancont.cxx @ 334] 00ddfe5c 77e12e98 000900c6 00000400 0000babe ole32!ThreadWndProc+0xe3 [F:\nt\private\ole32\com\dcomrem\chancont.cxx @ 565] 00ddfe7c 77e130e0 77aa8717 000900c6 00000400 USER32!UserCallWinProc+0x18 [..\i386\callproc.asm @ 100] 00ddff08 77e1320f 02e8b794 00000000 6956fb85 USER32!DispatchMessageWorker+0x2d0 [F:\nt\private\ntos\w32\ntuser\client\clmsg.c @ 1695] 00ddff14 6956fb85 02e8b794 77f821d6 00000000 USER32!DispatchMessageW+0xb [F:\nt\private\ntos\w32\ntuser\client\cltxt.h @ 879] 00ddff24 6956f86d 775a1501 775acfd9 00ddffec COMSVCS!STAMessageWork::DoWork+0x15 [..\inc\STAThred.h @ 242] 00ddffb4 77e8758a 0089f63c 775a1501 775acfd9 COMSVCS!STAThread::STAThreadWorker+0x465 [.\stathred.cpp @ 594] 00ddffec 00000000 6956f408 0089f63c 00000000 KERNEL32!BaseThreadStart+0x52 [D:\nt\private\windows\base\client\support.c @ 451]

