-->>Setup and usage<<--          
Icaros spins consuming 100% of a CPU core
#1
Bug 
Icaros 2.2.7 sometimes spins on my machine, consuming 100% of a CPU core. I captured a memory dump of the dllhost process on one such occasion. A native and CLR backtrace of the offending thread is below.

Looking through the stack I can find the name of the file that Icaros is stuck on. It's a normal AVI file and plays fine. However it is on a network share accessed over wifi. Perhaps Icaros isn't handling the connection failing and the file handle unexpectedly becoming invalid?

Quote:0:000> !runaway 3
User Mode Time
 Thread       Time
  4:f68       0 days 1:08:35.696
 12:684       0 days 0:00:00.000
 11:b0c       0 days 0:00:00.000
 10:ffc       0 days 0:00:00.000
  9:df8       0 days 0:00:00.000
  8:1860      0 days 0:00:00.000
  7:10a8      0 days 0:00:00.000
  6:17fc      0 days 0:00:00.000
  5:1294      0 days 0:00:00.000
  3:18d0      0 days 0:00:00.000
  2:2b8       0 days 0:00:00.000
  1:1ab8      0 days 0:00:00.000
  0:1664      0 days 0:00:00.000
Kernel Mode Time
 Thread       Time
  4:f68       0 days 5:25:54.241
 12:684       0 days 0:00:00.000
 11:b0c       0 days 0:00:00.000
 10:ffc       0 days 0:00:00.000
  9:df8       0 days 0:00:00.000
  8:1860      0 days 0:00:00.000
  7:10a8      0 days 0:00:00.000
  6:17fc      0 days 0:00:00.000
  5:1294      0 days 0:00:00.000
  3:18d0      0 days 0:00:00.000
  2:2b8       0 days 0:00:00.000
  1:1ab8      0 days 0:00:00.000
  0:1664      0 days 0:00:00.000

0:004> ~4s
ntdll!NtReadFile+0xa:
00000000`7773131a c3              ret

0:004> kp
Child-SP          RetAddr           Call Site
00000000`0275cd58 000007fe`fd4c1a7a ntdll!NtReadFile+0xa
00000000`0275cd60 00000000`774d0a19 KERNELBASE!ReadFile+0x76
00000000`0275cde0 000007fe`ff8695dd kernel32!ReadFileImplementation+0x55
00000000`0275ce20 000007fe`dd3aa70d shlwapi!CFileStream::Read+0x146
00000000`0275ceb0 000007fe`81fe1184 mscorlib_ni+0xc6a70d
00000000`0275cfd0 000007fe`81fe1ce5 0x000007fe`81fe1184
00000000`0275d080 000007fe`81fe217e 0x000007fe`81fe1ce5
00000000`0275d0c0 000007fe`81fe1b37 0x000007fe`81fe217e
00000000`0275d140 000007fe`81fe0ea6 0x000007fe`81fe1b37
00000000`0275d190 000007fe`81fe0aa6 0x000007fe`81fe0ea6
00000000`0275d200 000007fe`81fe0978 0x000007fe`81fe0aa6
00000000`0275d260 000007fe`e16f7739 0x000007fe`81fe0978
00000000`0275d2c0 000007fe`e16f75f7 clr!COMToCLRDispatchHelper+0x39
00000000`0275d2f0 000007fe`e16f7697 clr!COMToCLRWorker+0x1e7
00000000`0275d3b0 000007fe`fda02547 clr!GenericComCallStub+0x57
00000000`0275d440 000007fe`fd9fcf56 shell32!InitializeFileHandlerWithStream+0x15a
00000000`0275d4f0 000007fe`fda023ee shell32!CFileSysItemString::HandlerCreateInstance+0x280
00000000`0275d7c0 000007fe`fd9fd069 shell32!CFileSysItemString::_PropertyHandlerCreateInstance+0x9d
00000000`0275d860 000007fe`fda022a1 shell32!CFileSysItemString::LoadHandler+0x1ec
00000000`0275d970 000007fe`fd9ff934 shell32!CFSPropertyStoreFactory::_GetFileStore+0x2c4
00000000`0275dc40 000007fe`fd9ff711 shell32!CFSPropertyStoreFactory::_GetMultiplexPropertyStore+0x14c
00000000`0275e1e0 000007fe`fda0503a shell32!CFSPropertyStoreFactory::_GetPropertyStore+0xcd
00000000`0275e250 000007fe`fd9fca4e shell32!CFSPropertyStoreFactory::GetPropertyStoreForKeys+0x145
00000000`0275e7a0 000007fe`fd9fcb68 shell32!CShellItem::_GetPropertyStoreWorker+0x108
00000000`0275e860 000007fe`fdca0058 shell32!CShellItem::GetPropertyStoreForKeys+0xe1
00000000`0275e900 000007fe`fd88fe85 shell32!CPropertyThumbnailHandler::_GetThumbnailInternal+0xc4
00000000`0275e9f0 000007fe`fd93b68e rpcrt4!Invoke+0x65
00000000`0275ea50 000007fe`fd892356 rpcrt4!Ndr64StubWorker+0x61b
00000000`0275f010 000007fe`ff6f0883 rpcrt4!NdrStubCall3+0xb5
00000000`0275f070 000007fe`ff6f0ccd ole32!CStdStubBuffer_Invoke(struct IRpcStubBuffer * This = 0x00000000`00000001, struct tagRPCOLEMESSAGE * prpcmsg = 0x00000000`00000000, struct IRpcChannelBuffer * pRpcChannelBuffer = 0x00000000`00000000)+0x5b [d:\w7rtm\com\rpc\ndrole\stub.cxx @ 1586]
00000000`0275f0a0 000007fe`ff6f0c43 ole32!SyncStubInvoke(struct tagRPCOLEMESSAGE * pMsg = 0x00000000`0040c7d0, struct _GUID * riid = 0x00000000`0041caf4 {e357fccd-a995-4576-b01f-234630154e96}, class CIDObject * pID = 0x00000000`0041b970, void * pVtableAddress = 0x000007fe`fdde5598, struct IRpcChannelBuffer * pChnl = 0x00000000`003f9440, struct IRpcStubBuffer * pStub = 0x00000000`00476c70, unsigned long * pdwFault = 0x00000000`0275f410)+0x5d [d:\w7rtm\com\ole32\com\dcomrem\channelb.cxx @ 1187]
00000000`0275f110 000007fe`ff5aa4f0 ole32!StubInvoke(struct tagRPCOLEMESSAGE * pMsg = 0x00000000`0040c7d0, class CStdIdentity * pStdID = 0x00000000`00403350, struct IRpcStubBuffer * pStub = 0x00000000`0040c7d0, struct IRpcChannelBuffer * pChnl = 0x00000000`00000000, struct tagIPIDEntry * pIPIDEntry = 0x00000000`80004021, unsigned long * pdwFault = 0x00000000`0275f410)+0xdb [d:\w7rtm\com\ole32\com\dcomrem\channelb.cxx @ 1396]
00000000`0275f1c0 000007fe`ff5bd551 ole32!CCtxComChnl::ContextInvoke(struct tagRPCOLEMESSAGE * pMessage = 0x894139f3`00000001, struct IRpcStubBuffer * pStub = 0x00000000`00476c70, struct tagIPIDEntry * pIPIDEntry = 0x00000000`003f9f70, unsigned long * pdwFault = 0x00000000`0275f410)+0x190 [d:\w7rtm\com\ole32\com\dcomrem\ctxchnl.cxx @ 1262]
00000000`0275f350 000007fe`ff6f347e ole32!STAInvoke(struct tagRPCOLEMESSAGE * pMsg = 0x00000000`00403350, unsigned long CallCatIn = 0, struct IRpcStubBuffer * pStub = 0x00000000`003f9440, class IInternalChannelBuffer * pChnl = 0x00000000`00000000, void * pv = 0x00000000`003e4998, struct tagIPIDEntry * pIPIDEntry = 0x00000000`003f9f70, unsigned long * pdwFault = 0x00000000`0275f410)+0x91 [d:\w7rtm\com\ole32\com\dcomrem\callctrl.cxx @ 1923]
00000000`0275f3a0 000007fe`ff6f122b ole32!AppInvoke(class CMessageCall * pCall = 0x00000000`d0908070, class CRpcChannelBuffer * pChannel = 0x00000000`00403350, struct IRpcStubBuffer * pStub = 0x00000000`0040a260, void * pv = 0x00000000`003f9440, void * pStubBuffer = 0x00000000`004007f0, struct tagIPIDEntry * pIPIDEntry = 0x00000000`003f9f70, struct LocalThis * pLocalb = 0x00000000`004007e8)+0x1aa [d:\w7rtm\com\ole32\com\dcomrem\channelb.cxx @ 1081]
00000000`0275f410 000007fe`ff6f3542 ole32!ComInvokeWithLockAndIPID(class CMessageCall * pCall = 0x00000000`0040c740, struct tagIPIDEntry * pIPIDEntry = 0x00000000`00000400)+0x52b [d:\w7rtm\com\ole32\com\dcomrem\channelb.cxx @ 1727]
00000000`0275f5a0 000007fe`ff5bd42d ole32!ComInvoke(class CMessageCall * pCall = 0x00000000`003f9f70)+0xae [d:\w7rtm\com\ole32\com\dcomrem\channelb.cxx @ 1469]
00000000`0275f5d0 000007fe`ff5bd1d6 ole32!ThreadDispatch(void * param = 0x00000000`00403350)+0x29 [d:\w7rtm\com\ole32\com\dcomrem\chancont.cxx @ 298]
00000000`0275f600 00000000`775f9bd1 ole32!ThreadWndProc(struct HWND__ * window = 0x00000000`00000000, unsigned int message = 1, unsigned int64 wparam = 0, int64 params = 0n6937615111100886332)+0xaa [d:\w7rtm\com\ole32\com\dcomrem\chancont.cxx @ 654]
00000000`0275f680 00000000`775f98da user32!UserCallWinProcCheckWow+0x1ad
00000000`0275f740 000007fe`ff5bd0ab user32!DispatchMessageWorker+0x3b5
00000000`0275f7c0 000007fe`ff6e3e57 ole32!CDllHost::STAWorkerLoop(void)+0x68 [d:\w7rtm\com\ole32\com\objact\dllhost.cxx @ 957]
00000000`0275f820 000007fe`ff590106 ole32!CDllHost::WorkerThread(void)+0xd7 [d:\w7rtm\com\ole32\com\objact\dllhost.cxx @ 834]
00000000`0275f860 000007fe`ff590182 ole32!CRpcThread::WorkerLoop(void)+0x1e [d:\w7rtm\com\ole32\com\dcomrem\threads.cxx @ 257]
00000000`0275f8a0 00000000`774d59ed ole32!CRpcThreadCache::RpcWorkerThreadEntry(void * param = 0x00000000`00000000)+0x1a [d:\w7rtm\com\ole32\com\dcomrem\threads.cxx @ 63]
00000000`0275f8d0 00000000`7770c541 kernel32!BaseThreadInitThunk+0xd
00000000`0275f900 00000000`00000000 ntdll!RtlUserThreadStart+0x1d

0:004> !clrstack
OS Thread Id: 0xf68 (4)
       Child SP               IP Call Site
000000000275cee0 000000007773131a [InlinedCallFrame: 000000000275cee0] System.Runtime.InteropServices.ComTypes.IStream.Read(Byte[], Int32, IntPtr)
000000000275cee0 000007fedd3aa70d [InlinedCallFrame: 000000000275cee0] System.Runtime.InteropServices.ComTypes.IStream.Read(Byte[], Int32, IntPtr)
000000000275ceb0 000007fedd3aa70d DomainNeutralILStubClass.IL_STUB_CLRtoCOM(Byte[], Int32, IntPtr)
000000000275cfd0 000007fe81fe1184 IcarosPropertyHandler.StorageStream.Read(Byte[], Int32, Int32)
000000000275d080 000007fe81fe1c05 IcarosPropertyHandler.StorageStream.ReadLittleEndianBytes(Int32)
000000000275d0c0 000007fe81fe2190 IcarosPropertyHandler.Parsers.RiffChunks.StrlChunk.ParseChunk(IcarosPropertyHandler.StorageStream, Int32, IcarosPropertyHandler.Parsers.AviInfo)
000000000275d140 000007fe81fe1b37 IcarosPropertyHandler.Parsers.AviParser.ParseStream(IcarosPropertyHandler.StorageStream, Boolean)
000000000275d190 000007fe81fe0ea6 IcarosPropertyHandler.IcarosPropertyHandler.GetPropertiesFromStream(IcarosPropertyHandler.StorageStream, IcarosPropertyHandler.PropertyMap[] ByRef)
000000000275d200 000007fe81fe0aa6 IcarosPropertyHandler.PropertyHandler.Initialize(System.Runtime.InteropServices.ComTypes.IStream, IcarosPropertyHandler.AccessModes)
000000000275d260 000007fe81fe0978 DomainBoundILStubClass.IL_STUB_COMtoCLR(IntPtr, Int32)
000000000275d420 000007fee16f7739 [ComMethodFrame: 000000000275d420]
Reply
#2
Hi Marginal,

Could you please try and see if this problem still exists in v2.3.0 (download it here).
v2.3.0 contains a new property handler and I've made a lot of changes and fixes in that branch,
so there is a chance your problem has been fixed as well.
OS: Windows 7 Ultimate x64
Reply
#3
I'll see if the problem re-occurs with 2.3.0. Thanks.
Reply
#4
FYI the problem has not re-occurred with 2.3.0b5.
Reply
#5
Excellent! Thanks for getting back to me. 
Btw, if you're interested, I've just released 2.3.0 RC1
OS: Windows 7 Ultimate x64
Reply




Users browsing this thread: 1 Guest(s)