Re: Mixed .Net process dies without a trace: Fatal Execution Engine Error (7A103E78) (800703e9)

Peter vd Weerd <[email protected]> Wed, 16 Dec 2009 08:09:56 +0100
Newsgroups gmane.comp.windows.devel.dotnet.advanced
Message-ID <[email protected]>
No, thats the strange thing here.=20
CBD sees 2 first chance access violations that are handled by the CLR, =
which seem to be normal, since I see that in other apps too. The last =
dump beeing created was a '1st_chance_CONTRL_C_OR_Debug_Break'

However, Visual studio saw a StackOverflowException. But a look at the =
registers did made me suspicious if this was a real stackoverflow...

However, I violated rule #1: "Never change more than 1 thing at once" =
:-).=20
I included some DebugOut's in my code, to trace the =
IUnknown-interaction, and now VS also sees a breakpoint.
The DebugBreak was issued by the CLR. But no debugger-output....

Luckely, the msg in the eventlog is stable: Fatal Execution Engine Error =
(7A103E78) (800703e9)

Later this day I'll try to reproduce the original error.

Thanks,
P


----- Original Message -----=20
From: "Steve Johnson" <[email protected]>
To: <[email protected]>
Sent: Wednesday, December 16, 2009 2:10 AM
Subject: Re: [ADVANCED-DOTNET] Mixed .Net process dies without a trace: =
Fatal Execution Engine Error (7A103E78) (800703e9)


> Did you dump on a 1st chance Stack Overflow?
>=20
> --
> Steve Johnson
>=20
> On Tue, Dec 15, 2009 at 6:29 PM, Peter vd Weerd <[email protected]> =
wrote:
>=20
>> What I checked is that the stack doesn't grow.
>> The ESP is exactly the same during the 1st calls...
>>
>> /P
>>
>> ----- Original Message ----- From: "Mark Hurd" <[email protected]>
>>
>> To: <[email protected]>
>> Sent: Wednesday, December 16, 2009 12:23 AM
>> Subject: Re: [ADVANCED-DOTNET] Mixed .Net process dies without a =
trace:
>> Fatal Execution Engine Error (7A103E78) (800703e9)
>>
>>
>>
>> Given that, if you can put a break point inside C, see if there /is/
>> any difference between the first and second successful attempts. It
>> could be a problem that gets worse before failing completely.
>> (Unlikely, of course.)
>>
>> --
>> Regards,
>> Mark Hurd, B.Sc.(Ma.)(Hons.)
>>
>>
>> On Wed, Dec 16, 2009 at 9:39 AM, Peter vd Weerd <[email protected]> =
wrote:
>>
>>> Wait, forgot to tell.
>>> The sequence A-->B-->C doesn't kill the process immediately. The =
first 2
>>> times it works fine. But the 3rd time it dies...
>>>
>>> ----- Original Message ----- From: "Peter vd Weerd" =
<[email protected]>
>>> To: <[email protected]>
>>> Sent: Wednesday, December 16, 2009 12:05 AM
>>> Subject: [ADVANCED-DOTNET] Mixed .Net process dies without a trace: =
Fatal
>>> Execution Engine Error (7A103E78) (800703e9)
>>>
>>>
>>> Hi experts,
>>>
>>> I have an COM-interop problem.
>>> The host is a C++ COM-component (A), which loads a .Net object (B) =
that is
>>> comvisible.
>>> A method in this .Net object is called and loads a different C++
>>> COM-component (C).
>>>
>>> So: A-->B-->C.
>>>
>>> All the C++ COM-components are threadsave and support the =
freethreaded
>>> marshaler.
>>> They are registered with threadingmode=3Dboth. The whole thing runs =
on a
>>> STA-thread.
>>>
>>> In some situations, the application dies without a trace, and a msg =
is in
>>> the eventlog:
>>> .NET Runtime version 2.0.50727.3082 - Fatal Execution Engine Error
>>> (7A103E78) (800703e9)
>>>
>>> 800703e9 means: stackoverflow.
>>>
>>> When I run it from Visual studio, I stops in the call from B to C, =
indead
>>> with a stackoverflow, but I can't see any unmanaged code (DLL's are =
not
>>> written in MS C++).
>>>
>>> So I used ADPlus in crash-mode to generate some dumps, and =
investigate
>>> there.
>>> The last thing I can see there is a DebugBreak.
>>> The stacktrace is below.
>>> It looks like the CLR does some marshaling magic and peeks the msg =
queue.
>>> I
>>> didn't expect that because of the FT marshaller.
>>> Furthermore, if I put a MessageBox in the .Net code, just before the =
call
>>> to
>>> C, everything works fine. So my feeling is that it has something to =
do
>>> with
>>> marshaling and timing.
>>> But I can't get my finger on the right place.
>>>
>>> Any idea's? Any pointers where to look? Thanks a lot.
>>>
>>> Peter
>>>
>>>
>>> The stacktrace is:
>>> (By the way, igor is my 'A' component, the stack doesn't show any =
code of
>>> the 'C' component.
>>> And although the method in C wasn't executed, there has been a lot =
of
>>> QueryInterfaces, AddRefs, etc in that 'C' component.)
>>>
>>> 037bc278 7a096467 037bc71c 79f7762b 3ab9eb41 ntdll!DbgBreakPoint
>>> 037bc728 7a096796 800703e9 7a103e78 00000000
>>> mscorwks!EEPolicy::LogFatalError+0x2b5
>>> 037bc740 7a103e83 800703e9 7a103e78 00000000
>>> mscorwks!EEPolicy::HandleFatalError+0x4d
>>> 037bc768 7a0bd9a9 3ab9ebd1 071f8a98 037becd4
>>> mscorwks!Thread::RestoreGuardPage+0xb7
>>> 037bc7b8 79f4c30c 037becd4 3ab9eb95 071f8a98
>>> mscorwks!ReleaseTransitionHelper+0x103
>>> 037bc7fc 79f4c370 037becd4 071f8a78 3ab9e459
>>> mscorwks!SafeReleaseHelper+0x8c
>>> 037bc830 79faa892 037becd4 071f8a78 00000001 =
mscorwks!SafeRelease+0x2f
>>> 037bc848 79faa9ad 3ab9e411 00000001 071f8a78
>>> mscorwks!RCW::ReleaseAllInterfaces+0x48
>>> 037bc878 79faa9d9 071f8a78 3ab9e4c1 00000001
>>> mscorwks!RCW::ReleaseAllInterfacesCallBack+0xbd
>>> 037bc8a8 7a079480 16effb74 037bc8e4 7a0798e8 =
mscorwks!RCW::Cleanup+0x22
>>> 037bc8b4 7a0798e8 071f9100 3ab9e48d 037bc900
>>> mscorwks!RCWCleanupList::ReleaseRCWListRaw+0x16
>>> 037bc8e4 7a043f25 000a0800 000a0800 037bc910
>>> mscorwks!RCWCleanupList::ReleaseRCWListInCorrectCtx+0xdf
>>> 037bc8f4 77525834 16effa10 037bc914 037bc93c
>>> mscorwks!CtxEntry::EnterContextCallback+0x89
>>> 037bc910 77e799f4 0bd8ed80 0bd8e930 02020202
>>> ole32!CRemoteUnknown::DoCallback+0x7a
>>> 037bc92c 77ef421a 775257f9 037bc940 00000002 rpcrt4!Invoke+0x30
>>> 037bcd30 77ef4bf3 0bd845f8 0bd8f170 000d53b8 =
rpcrt4!NdrStubCall2+0x297
>>> 037bcd88 77600c15 0bd845f8 000d53b8 0bd8f170
>>> rpcrt4!CStdStubBuffer_Invoke+0xc6
>>> 037bcdc8 77600bbf 000d53b8 0bdb5ff4 00000000 =
ole32!SyncStubInvoke+0x33
>>> 037bce10 7752ad31 000d53b8 071e9428 0bd845f8 ole32!StubInvoke+0xa7
>>> 037bcee8 7752ac56 0bd8f170 00000000 0bd845f8
>>> ole32!CCtxComChnl::ContextInvoke+0xe3
>>> 037bcf04 7752b771 000d53b8 00000001 0bd845f8 ole32!MTAInvoke+0x1a
>>> 037bcf30 77600e1f 000d53b8 00000001 0bd845f8 ole32!STAInvoke+0x4a
>>> 037bcf64 77602df3 000d5360 0bd8f170 0bd845f8 ole32!AppInvoke+0x7e
>>> 037bd038 77600dd6 000d5360 0007b818 00000000
>>> ole32!ComInvokeWithLockAndIPID+0x2c2
>>> 037bd064 7752b7ab 000d5360 00000400 000cc000 ole32!ComInvoke+0x60
>>> 037bd078 7752b5e1 000d5360 037bd0f8 7752b54e =
ole32!ThreadDispatch+0x23
>>> 037bd090 7e418734 00080944 00056128 0000babe =
ole32!ThreadWndProc+0xfe
>>> 037bd0bc 7e418816 7752b54e 00080944 00000400
>>> user32!InternalCallWinProc+0x28
>>> 037bd124 7e4189cd 00000000 7752b54e 00080944
>>> user32!UserCallWinProcCheckWow+0x150
>>> 037bd184 7e418a10 037bd1a8 00000000 037bd1c4
>>> user32!DispatchMessageWorker+0x306
>>> 037bd194 7752f2d0 037bd1a8 00000102 037bd208 =
user32!DispatchMessageW+0xf
>>> 037bd1c4 7752f10d 80010115 80010115 00000000
>>> ole32!CCliModalLoop::PeekRPCAndDDEMessage+0x4c
>>> 037bd1d8 77557237 037bd40c 00000001 037bd204
>>> ole32!CCliModalLoop::BlockFn+0x5e
>>> 037bd24c 79f9e14d 00000002 00000001 00000001
>>> ole32!CoWaitForMultipleHandles+0xcf
>>> 037bd26c 79f9e0b4 00000000 00000001 00000001 =
mscorwks!NT5WaitRoutine+0x51
>>> 037bd2d8 79f9e018 00000001 037bd40c 00000000 =
mscorwks!MsgWaitHelper+0xa5
>>> 037bd2f8 79f4c664 00000001 037bd40c 00000000
>>> mscorwks!Thread::DoAppropriateAptStateWait+0x28
>>> 037bd37c 79f4c6f9 00000001 037bd40c 00000000
>>> mscorwks!Thread::DoAppropriateWaitWorker+0x13c
>>> 037bd3cc 79f90c76 00000001 037bd40c 00000000
>>> mscorwks!Thread::DoAppropriateWait+0x40
>>> 037bd41c 79ef018c 00000001 0bd56d70 037bd47c =
mscorwks!Thread::JoinEx+0x86
>>> 037bd42c 7a079b7c 00000001 00000001 3ab9f815 =
mscorwks!Thread::Join+0x14
>>> 037bd47c 79faa55f 00000001 037bd4cc 79faa5c8
>>> mscorwks!RCWCleanupList::CleanupWrappersInCurrentCtxThread+0x15a
>>> 037bd488 79faa5c8 0721495c 037bd52c 3ab9f8a5 =
mscorwks!RCW::Initialize+0x78
>>> 037bd4cc 79faa25f 0721495c 037bd52c 3ab9f955 =
mscorwks!RCW::CreateRCW+0x84
>>> 037bd53c 79faa36d 00000000 037bd578 3ab9f9e1
>>> mscorwks!COMInterfaceMarshaler::CreateObjectRef+0x45
>>> 037bd588 79f9d0f8 3ab9f62d 037bdce4 037bdce4
>>> mscorwks!COMInterfaceMarshaler::FindOrCreateObjectRef+0xac
>>> 037bda44 79f9d294 072148e8 058e6918 00000001
>>> mscorwks!GetObjectRefFromComIP+0x1ec
>>> 037bda64 79f9d2fb 000c3940 072148e8 058e5bb0
>>> mscorwks!UnmarshalObjectFromInterface+0x19
>>> 037bda80 79fb5089 037bdce4 037bdcc8 79fb5079
>>> mscorwks!InterfaceMarshalerBase::ConvertSpaceNativeToCLR+0x30
>>> 037bda8c 79fb5079 037bdf70 037bdf60 3ab9f0a1
>>>
>>> =
mscorwks!DefaultMarshalOverrides<InterfaceMarshalerBase>::ReturnCLRFromNa=
tiveRetval+0xb
>>> 037bdcc8 79f139af 058da2d3 037bdf5c 037bdf74 mscorwks!RunML+0x9ac
>>> 037bdfa8 058da28e 0bd56d70 037bdffc 3987259a =
mscorwks!CLRToCOMWorker+0x25f
>>> WARNING: Frame IP not in any known module. Following frames may be =
wrong.
>>> 037bdfe4 05a8313f 1200e4d0 1200ec7c 11f0d990 0x58da28e
>>> 037be11c 79f68c32 057a26cc 0bd56d70 00000000 0x5a8313f
>>> 037be20c 79f68deb 0bd56d70 037be404 037be47c
>>> mscorwks!COMToCLRWorkerBody+0x115
>>> 037be268 79f68f54 0bd56d70 037be404 037be47c
>>> mscorwks!COMToCLRWorkerDebuggerWrapper+0x37
>>> 037be43c 058da706 0bd56d70 037be47c 3987259a =
mscorwks!COMToCLRWorker+0x157
>>> *** WARNING: Unable to verify checksum for igor022.dll
>>> *** ERROR: Symbol file could not be found. Defaulted to export =
symbols for
>>> igor022.dll -
>>> 037be464 0a50defc 0ae26b88 037beecc 0add0020 0x58da706
>>> 037be49c 0a50e58c 0add0020 037beecc 037beecc =
igor022!taoDeleteFiles+0x47ac
>>> 037be4b4 0a510c1c 0ad99a74 037beecc 00000001 =
igor022!taoDeleteFiles+0x4e3c
>>> 037be504 0a4fcece 0ad319b0 037beecc 0ad319b0 =
igor022!taoDeleteFiles+0x74cc
>>> 037bf35c 0a4fca96 0ad306a8 00000000 00000002 =
igor022!PtrToInt+0xbbd2e
>>> 037bf4a8 0a4fc68f 0ad306a8 0a5f2148 00000003 =
igor022!PtrToInt+0xbb8f6
>>> 037bf500 0a5302f3 0ad306a8 0bad5ef0 00000003 =
igor022!PtrToInt+0xbb4ef
>>>
>>
>> =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
>> View archives and manage your subscription(s) at
>> http://peach.ease.lsoft.com/archives
>>
>> =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
>> View archives and manage your subscription(s) at
>> http://peach.ease.lsoft.com/archives
>>
>=20
> =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> View archives and manage your subscription(s) at =
http://peach.ease.lsoft.com/archives

=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
View archives and manage your subscription(s) at http://peach.ease.lsoft.com/archives