mirror of
https://github.com/opencv/opencv.git
synced 2024-11-25 03:30:34 +08:00
Workaround hanging of ocl module when ocl API in not really used
This commit is contained in:
parent
652606f780
commit
3400d83778
@ -913,6 +913,7 @@ namespace cv
|
|||||||
auto_ptr<Context> Context::clCxt;
|
auto_ptr<Context> Context::clCxt;
|
||||||
int Context::val = 0;
|
int Context::val = 0;
|
||||||
static Mutex cs;
|
static Mutex cs;
|
||||||
|
static volatile int context_tear_down = 0;
|
||||||
Context* Context::getContext()
|
Context* Context::getContext()
|
||||||
{
|
{
|
||||||
if(*((volatile int*)&val) != 1)
|
if(*((volatile int*)&val) != 1)
|
||||||
@ -920,9 +921,10 @@ namespace cv
|
|||||||
AutoLock al(cs);
|
AutoLock al(cs);
|
||||||
if(*((volatile int*)&val) != 1)
|
if(*((volatile int*)&val) != 1)
|
||||||
{
|
{
|
||||||
|
if (context_tear_down)
|
||||||
|
return clCxt.get();
|
||||||
if( 0 == clCxt.get())
|
if( 0 == clCxt.get())
|
||||||
clCxt.reset(new Context);
|
clCxt.reset(new Context);
|
||||||
|
|
||||||
std::vector<Info> oclinfo;
|
std::vector<Info> oclinfo;
|
||||||
CV_Assert(getDevice(oclinfo, CVCL_DEVICE_TYPE_ALL) > 0);
|
CV_Assert(getDevice(oclinfo, CVCL_DEVICE_TYPE_ALL) > 0);
|
||||||
oclinfo[0].impl->setDevice(0, 0, 0);
|
oclinfo[0].impl->setDevice(0, 0, 0);
|
||||||
@ -1045,10 +1047,15 @@ BOOL WINAPI DllMain( HINSTANCE, DWORD fdwReason, LPVOID )
|
|||||||
{
|
{
|
||||||
// application hangs if call clReleaseCommandQueue here, so release context only
|
// application hangs if call clReleaseCommandQueue here, so release context only
|
||||||
// without context release application hangs as well
|
// without context release application hangs as well
|
||||||
cl_context ctx = (cl_context)getoclContext();
|
context_tear_down = 1;
|
||||||
|
Context* cv_ctx = Context::getContext();
|
||||||
|
if(cv_ctx)
|
||||||
|
{
|
||||||
|
cl_context ctx = (cl_context)&(cv_ctx->impl->oclcontext);
|
||||||
if(ctx)
|
if(ctx)
|
||||||
openCLSafeCall(clReleaseContext(ctx));
|
openCLSafeCall(clReleaseContext(ctx));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user