Recently we are seeing a significant increase in crashes related to COM at our client sites after they upgraded to Windows Server 2008R2. Initially we thought it might be due to COM reference counting issue, but after further investigation going through the code, we have ruled it out. Another angle that we are looking at is, is it possible that the COM library is getting un-initialized due to which this issue might be occurring? Again we have ruled it out after investigating going through the code. As of now we do not have any concrete answers.
Is there any known instances of COM crashes increasing after migrating to 64bit?
Below are the crash fingerprints. I have kept it concise for this post.
Crash 1:
0:000> kpn 2
# ChildEBP RetAddr
00 0033e9d8 662051d5 pvformscom!ATL::CComPtrBase::~CComPtrBase(void)+0x6 [c:\program files\microsoft visual studio 10.0\vc\atlmfc\include\atlcomcli.h @ 162]
01 0033ea00 66210586 pvformscom!COrder::~COrder(void)+0xa6 [c:\2012.01_svc_dep\cpp\pvformscom\order.cpp @ 149]
0:000> .frame 00
00 0033e9d8 662051d5 pvformscom!ATL::CComPtrBase::~CComPtrBase+0x6 [c:\program files\microsoft visual studio 10.0\vc\atlmfc\include\atlcomcli.h @ 162]
0:000> dt this
Local var @ ecx Type ATL::CComPtrBase*
{ 00000001 } +0x000 p : 0x00000001 ICalendar
Crash 2:
0:000> kpn 2
# ChildEBP RetAddr
00 0016e6d8 646052a9 pvformscom!ATL::CComPtrBase::~CComPtrBase(void)+0x6 [c:\program files\microsoft visual studio 10.0\vc\atlmfc\include\atlcomcli.h @ 162]
01 0016e700 646106ae pvformscom!COrder::~COrder(void)+0x6f [c:\2012.01_svc_dep\cpp\pvformscom\order.cpp @ 152]
0:000> .frame 00
00 0016e6d8 646052a9 pvformscom!ATL::CComPtrBase::~CComPtrBase+0x6 [c:\program files\microsoft visual studio 10.0\vc\atlmfc\include\atlcomcli.h @ 162]
0:000> dt this
Local var @ ecx Type ATL::CComPtrBase*
{ 00000001 } +0x000 p : 0x00000001 IImmunization
Crash 3:
0:000> kpn 2
# ChildEBP RetAddr
00 0032f008 6193f444 pvformscom!ATL::CComPtrBase::~CComPtrBase(void)+0x6 [c:\program files\microsoft visual studio 10.0\vc\atlmfc\include\atlcomcli.h @ 162]
01 0032f038 6194d2a7 pvformscom!CClinicalEvent::~CClinicalEvent(void)+0x2df [c:\2012.01_svc_dep\cpp\pvformscom\clinicalevent.cpp @ 170]
0:000> .frame 00
00 0032f008 6193f444 pvformscom!ATL::CComPtrBase::~CComPtrBase+0x6 [c:\program files\microsoft visual studio 10.0\vc\atlmfc\include\atlcomcli.h @ 162]
0:000> dt this
Local var @ ecx Type ATL::CComPtrBase*
{ 00000001 } +0x000 p : 0x00000001 IPVCollection
Any help is highly appreciated.
NOTE: We are using some smartpointers in our class as member varibale.
Thanks,
Sree
IUnknown::Release
call. At the moment of the call the pointer is either invalid or the call takes place on wrong thread. Hence the problem, and the problem with~CComPtrBase
on call stack. – Roman R.