Merge pull request #2594 from arkunze:pullreq/140319-dll-shutdown-fix-b
This commit is contained in:
commit
ced81b9121
@ -1581,7 +1581,7 @@ void finish()
|
|||||||
|
|
||||||
#define IMPLEMENT_REFCOUNTABLE() \
|
#define IMPLEMENT_REFCOUNTABLE() \
|
||||||
void addref() { CV_XADD(&refcount, 1); } \
|
void addref() { CV_XADD(&refcount, 1); } \
|
||||||
void release() { if( CV_XADD(&refcount, -1) == 1 ) delete this; } \
|
void release() { if( CV_XADD(&refcount, -1) == 1 && !cv::__termination) delete this; } \
|
||||||
int refcount
|
int refcount
|
||||||
|
|
||||||
/////////////////////////////////////////// Platform /////////////////////////////////////////////
|
/////////////////////////////////////////// Platform /////////////////////////////////////////////
|
||||||
|
@ -918,16 +918,22 @@ public:
|
|||||||
#pragma warning(disable:4447) // Disable warning 'main' signature found without threading model
|
#pragma warning(disable:4447) // Disable warning 'main' signature found without threading model
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
BOOL WINAPI DllMain(HINSTANCE, DWORD fdwReason, LPVOID);
|
extern "C"
|
||||||
|
|
||||||
BOOL WINAPI DllMain(HINSTANCE, DWORD fdwReason, LPVOID lpReserved)
|
BOOL WINAPI DllMain(HINSTANCE, DWORD fdwReason, LPVOID lpReserved)
|
||||||
{
|
{
|
||||||
if (fdwReason == DLL_THREAD_DETACH || fdwReason == DLL_PROCESS_DETACH)
|
if (fdwReason == DLL_THREAD_DETACH || fdwReason == DLL_PROCESS_DETACH)
|
||||||
{
|
{
|
||||||
if (lpReserved != NULL) // called after ExitProcess() call
|
if (lpReserved != NULL) // called after ExitProcess() call
|
||||||
|
{
|
||||||
cv::__termination = true;
|
cv::__termination = true;
|
||||||
cv::deleteThreadAllocData();
|
}
|
||||||
cv::deleteThreadData();
|
else
|
||||||
|
{
|
||||||
|
// Not allowed to free resources if lpReserved is non-null
|
||||||
|
// http://msdn.microsoft.com/en-us/library/windows/desktop/ms682583.aspx
|
||||||
|
cv::deleteThreadAllocData();
|
||||||
|
cv::deleteThreadData();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user