[SHELL32]

- Finally give up on that assert. It's not easily fixable
CORE-9839 or CORE-9844 or CORE-9845 or whatever

svn path=/trunk/; revision=68218
This commit is contained in:
Thomas Faber 2015-06-21 05:21:30 +00:00
parent 3d3afdd225
commit c146d77c04
3 changed files with 1 additions and 17 deletions

View file

@ -287,7 +287,6 @@ CDesktopFolder::CDesktopFolder() :
CDesktopFolder::~CDesktopFolder() CDesktopFolder::~CDesktopFolder()
{ {
ASSERT(_CreatorClass::IsTerminated());
} }
HRESULT WINAPI CDesktopFolder::FinalConstruct() HRESULT WINAPI CDesktopFolder::FinalConstruct()

View file

@ -161,7 +161,6 @@ CDrivesFolder::CDrivesFolder()
CDrivesFolder::~CDrivesFolder() CDrivesFolder::~CDrivesFolder()
{ {
TRACE ("-- destroying IShellFolder(%p)\n", this); TRACE ("-- destroying IShellFolder(%p)\n", this);
ASSERT(_CreatorClass::IsTerminated());
SHFree(pidlRoot); SHFree(pidlRoot);
} }

View file

@ -47,7 +47,6 @@ class CComCreatorCentralInstance
{ {
private: private:
static IUnknown *s_pInstance; static IUnknown *s_pInstance;
static bool s_IsTerminated;
public: public:
static HRESULT WINAPI CreateInstance(void *pv, REFIID riid, LPVOID *ppv) static HRESULT WINAPI CreateInstance(void *pv, REFIID riid, LPVOID *ppv)
@ -59,26 +58,17 @@ public:
{ {
PVOID pObj; PVOID pObj;
HRESULT hr; HRESULT hr;
s_IsTerminated = true;
hr = ATL::CComCreator< T >::CreateInstance(NULL, IID_IUnknown, &pObj); hr = ATL::CComCreator< T >::CreateInstance(NULL, IID_IUnknown, &pObj);
if (FAILED(hr)) if (FAILED(hr))
{
s_IsTerminated = false;
return hr; return hr;
}
if (InterlockedCompareExchangePointer((PVOID *)&s_pInstance, pObj, NULL)) if (InterlockedCompareExchangePointer((PVOID *)&s_pInstance, pObj, NULL))
static_cast<IUnknown *>(pObj)->Release(); static_cast<IUnknown *>(pObj)->Release();
s_IsTerminated = false;
} }
return s_pInstance->QueryInterface(riid, ppv); return s_pInstance->QueryInterface(riid, ppv);
} }
static void Term() static void Term()
{ {
ULONG ref; ULONG ref;
#ifdef ASSERT
ASSERT(!s_IsTerminated);
#endif
s_IsTerminated = true;
if (s_pInstance) if (s_pInstance)
{ {
ref = s_pInstance->Release(); ref = s_pInstance->Release();
@ -88,15 +78,11 @@ public:
s_pInstance = NULL; s_pInstance = NULL;
} }
} }
static bool IsTerminated() { return s_IsTerminated; }
}; };
template <typename T> template <typename T>
IUnknown *CComCreatorCentralInstance<T>::s_pInstance = NULL; IUnknown *CComCreatorCentralInstance<T>::s_pInstance = NULL;
template <typename T>
bool CComCreatorCentralInstance<T>::s_IsTerminated = false;
#define DECLARE_CENTRAL_INSTANCE_NOT_AGGREGATABLE(x) \ #define DECLARE_CENTRAL_INSTANCE_NOT_AGGREGATABLE(x) \
public: \ public: \
typedef CComCreatorCentralInstance< ATL::CComObject<x> > _CreatorClass; typedef CComCreatorCentralInstance< ATL::CComObject<x> > _CreatorClass;