dotnet clr:
Hi,
Wondering if anyone can make better sense of this app dump than I.
Working on app that perioldiclly hangs, with maxed out cpu. The app is
reading data from hearing aids ( 1 or 2) connected via a serial port to an
external device that interfaces w/hearing aid. App is a win forms app
written in C#, Dot Net 1.1.
Using Windbg I determined that the apps main ui thread is using all the cpu.
used adplus to capture app state.
Best I can tell is that our main ui thread is in the garbage collecting
state and it is acting like it is in a infinite loop.
** Thread Info **
ThreadCount: 6
UnstartedThread: 0
BackgroundThread: 2
PendingThread: 0
DeadThread: 2
PreEmptive GC Alloc
Lock
ID ThreadOBJ State GC Context Domain
Count APT Exception
0 0x1194 0x0015edd0 0x6020 Disabled 0x00000000:0x00000000 0x00159dd0
1 STA (GC)
2 0x1388 0x001676f0 0xb220 Enabled 0x00000000:0x00000000 0x00159dd0
0 MTA (Finalizer)
XXX 0 0x00223918 0x5820 Enabled 0x00000000:0x00000000 0x00159dd0
0 STA
XXX 0 0x04e00f80 0x1820 Enabled 0x00000000:0x00000000 0x00159dd0
0 Ukn
11 0x1400 0x04e02c80 0x7022 Enabled 0x00000000:0x00000000 0x00159dd0
0 STA
12 0x1060 0x04e02e38 0x2001220 Enabled 0x00000000:0x00000000 0x00159dd0
0 Ukn
0 - is main ui thread
11 - is background thread to do i/o w/external device
12- is background thread that toggles the priority of the i/o background
thread(11).
A little confused about thread state values, seems to be more data than
ThreadState enum supports,
My quess is
0 is WaitSleepJoin
11 is WaitSleepJoin and SuspendRequested
12 is WaitSleepJoin
States for 11 and 12 seem funny to me because their call stack seems to show
they waiting for gargage collection 2 finish. ( following call
WaitUntilGCComplete in call stack)
Looking at call stack for main ui thread it appears that it had to allocate
more memory and
a garbage collection was started and it never finished.
dump stacks for threads follow
Thread 0 - sorry quite big
0:000> !dumpstack
Thread 0
Current frame: ntdll!KiFastSystemCallRet
ChildEBP RetAddr Caller,Callee
0012e5a8 7c90e9ab ntdll!ZwWaitForMultipleObjects+0xc
0012e5ac 7c8094f2 kernel32!WaitForMultipleObjectsEx+0x12c, calling
ntdll!ZwWaitForMultipleObjects
0012e638 7c8399f3 kernel32!_except_handler3
0012e648 7c809c86 kernel32!WaitForMultipleObjects+0x18, calling
kernel32!WaitForMultipleObjectsEx
0012e664 79247d67 mscorwks!Thread::SysSuspendForGC+0x248, calling
kernel32!WaitForMultipleObjects
0012e6bc 791efdaf mscorwks!Int32ToDecStr+0xf4, calling
mscorwks!__security_check_cookie
0012e6dc 791b452d mscorwks!gc_heap::allocate_more_space+0x3f0, calling
mscorwks!gc_heap::adjust_limit_clr
0012e71c 791b452d mscorwks!gc_heap::allocate_more_space+0x3f0, calling
mscorwks!gc_heap::adjust_limit_clr
0012e758 792d176b mscorwks!GCHeap::Alloc+0x77, calling
mscorwks!gc_heap::allocate_more_space
0012e764 792d17bd mscorwks!GCHeap::Alloc+0xc9, calling
mscorwks!__security_check_cookie
0012e774 791db30c mscorwks!FastAllocatePrimitiveArray+0x45, calling
mscorwks!Alloc
0012e794 791db8a5 mscorwks!JIT_NewArr1+0xbb, calling
mscorwks!FastAllocatePrimitiveArray
0012e79c 791db8b2 mscorwks!JIT_NewArr1+0xc8, calling mscorwks!Frame::Pop
0012e7a0 791db8ba mscorwks!JIT_NewArr1+0xd0, calling
mscorwks!HelperMethodFrame::RestoreState
0012e7b4 792d17bd mscorwks!GCHeap::Alloc+0xc9, calling
mscorwks!__security_check_cookie
0012e7c4 793c22d0 mscorwks!COMNlsInfo::GetCaseInsHash+0xcc, calling
mscorwks!HashiStringKnownLower80
0012e7c8 791f175b mscorwks!JITutil_IsInstanceOfBizarre+0x15d, calling 00971e90
0012e7dc 791db847 mscorwks!JIT_NewArr1+0x15, calling
mscorwks!LazyMachState::captureState
0012e7f0 7923135c mscorwks!COMString::EqualsObject+0x45, calling
mscorwks!WcharCompareHelper
0012e7f8 79231365 mscorwks!COMString::EqualsObject+0x4e, calling 00971e90
0012e804 799a44fd (MethodDesc 0x79ba9b70 +0x35
System.Collections.Hashtable.KeyEquals)
0012e80c 7999c0e8 (MethodDesc 0x79ba9ad0 +0xc8
System.Collections.Hashtable.get_Item)
0012e840 791f11dc mscorwks!COMString::EqualsString+0x3f, calling
mscorwks!WcharCompareHelper
0012e854 791b452d mscorwks!gc_heap::allocate_more_space+0x3f0, calling
mscorwks!gc_heap::adjust_limit_clr
0012e870 791b3271 mscorwks!BaseCrst::Enter+0x3e, calling
ntdll!RtlTryEnterCriticalSection
0012e880 791b3284 mscorwks!BaseCrst::IncThreadLockCount+0x6, calling 00971e90
0012e89c 792116aa mscorwks!GCHeap::SuspendEE+0xcf, calling
mscorwks!Thread::SysSuspendForGC
0012e8b4 79213c1f mscorwks!GCHeap::GarbageCollectGeneration+0x103, calling
mscorwks!GCHeap::SuspendEE
0012e8d0 79214e83 mscorwks!gc_heap::allocate_more_space+0x13a, calling
mscorwks!GCHeap::GarbageCollectGeneration
0012e900 792d176b mscorwks!GCHeap::Alloc+0x77, calling
mscorwks!gc_heap::allocate_more_space
0012e91c 792d17bd mscorwks!GCHeap::Alloc+0xc9, calling
mscorwks!__security_check_cookie
0012e93c 792d17bd mscorwks!GCHeap::Alloc+0xc9, calling
mscorwks!__security_check_cookie
0012e960 0f97366c (MethodDesc 0xf7f8600 +0xcc4
System.Data.XmlDataLoader.InferSchema), calling mscorwks!JIT_IsInstanceOf
0012e97c 791b3af0 mscorwks!Alloc+0x3a, calling mscorwks!GCHeap::Alloc
0012e98c 791db30c mscorwks!FastAllocatePrimitiveArray+0x45, calling
mscorwks!Alloc
0012e9ac 791db8a5 mscorwks!JIT_NewArr1+0xbb, calling
mscorwks!FastAllocatePrimitiveArray
0012e9b4 791db8b2 mscorwks!JIT_NewArr1+0xc8, calling mscorwks!Frame::Pop
0012e9b8 791db8ba mscorwks!JIT_NewArr1+0xd0, calling
mscorwks!HelperMethodFrame::RestoreState
0012e9e0 791f175b mscorwks!JITutil_IsInstanceOfBizarre+0x15d, calling 00971e90
0012e9f4 791db847 mscorwks!JIT_NewArr1+0x15, calling
mscorwks!LazyMachState::captureState
0012ea08 7923135c mscorwks!COMString::EqualsObject+0x45, calling
mscorwks!WcharCompareHelper
0012ea10 79231365 mscorwks!COMString::EqualsObject+0x4e, calling 00971e90
0012ea1c 799a44fd (MethodDesc 0x79ba9b70 +0x35
System.Collections.Hashtable.KeyEquals)
0012ea24 7999c0e8 (MethodDesc 0x79ba9ad0 +0xc8
System.Collections.Hashtable.get_Item)
0012ea58 791f11dc mscorwks!COMString::EqualsString+0x3f, calling
mscorwks!WcharCompareHelper
0012ea6c 0f97366c (MethodDesc 0xf7f8600 +0xcc4
System.Data.XmlDataLoader.InferSchema), calling mscorwks!JIT_IsInstanceOf
0012ea88 791b3af0 mscorwks!Alloc+0x3a, calling mscorwks!GCHeap::Alloc
0012ea98 791db30c mscorwks!FastAllocatePrimitiveArray+0x45, calling
mscorwks!Alloc
0012eab4 791b3af0 mscorwks!Alloc+0x3a, calling mscorwks!GCHeap::Alloc
0012eac4 791bdfaa mscorwks!AllocateArrayEx+0x161, calling mscorwks!Alloc
0012ead4 791b3af0 mscorwks!Alloc+0x3a, calling mscorwks!GCHeap::Alloc
0012eae4 791bdfaa mscorwks!AllocateArrayEx+0x161, calling mscorwks!Alloc