diff --git a/modules/core/src/ocl.cpp b/modules/core/src/ocl.cpp index 27ff1c9c70b5ce4c9d27505faaa6cebbeba8a343..d424e6bac085363d196d3c4e5b42db7ff7a24a52 100644 --- a/modules/core/src/ocl.cpp +++ b/modules/core/src/ocl.cpp @@ -2476,23 +2476,23 @@ const Device& Context::device(size_t idx) const Context& Context::getDefault(bool initialize) { - static Context ctx; - if(!ctx.p && haveOpenCL()) + static Context* ctx = new Context(); + if(!ctx->p && haveOpenCL()) { - if (!ctx.p) - ctx.p = new Impl(); + if (!ctx->p) + ctx->p = new Impl(); if (initialize) { // do not create new Context right away. // First, try to retrieve existing context of the same type. // In its turn, Platform::getContext() may call Context::create() // if there is no such context. - if (ctx.p->handle == NULL) - ctx.p->setDefault(); + if (ctx->p->handle == NULL) + ctx->p->setDefault(); } } - return ctx; + return *ctx; } Program Context::getProg(const ProgramSource& prog, @@ -3122,7 +3122,12 @@ struct Program::Impl { if( handle ) { - clReleaseProgram(handle); +#ifdef _WIN32 + if (!cv::__termination) +#endif + { + clReleaseProgram(handle); + } handle = NULL; } }