From 86353eb54186c28581ad86fc61e90fce2ce33662 Mon Sep 17 00:00:00 2001 From: Ilya Lavrenov Date: Thu, 30 Jan 2014 01:47:25 +0400 Subject: [PATCH] fix for PR 2196 --- modules/core/src/ocl.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/modules/core/src/ocl.cpp b/modules/core/src/ocl.cpp index 7201fca..1a39c99 100644 --- a/modules/core/src/ocl.cpp +++ b/modules/core/src/ocl.cpp @@ -2704,10 +2704,12 @@ bool Kernel::empty() const int Kernel::set(int i, const void* value, size_t sz) { + if (!p || !p->handle) + return -1; CV_Assert(i >= 0); if( i == 0 ) p->cleanupUMats(); - if( !p || !p->handle || clSetKernelArg(p->handle, (cl_uint)i, sz, value) < 0 ) + if( clSetKernelArg(p->handle, (cl_uint)i, sz, value) < 0 ) return -1; return i+1; } @@ -2725,9 +2727,9 @@ int Kernel::set(int i, const UMat& m) int Kernel::set(int i, const KernelArg& arg) { - CV_Assert( i >= 0 ); if( !p || !p->handle ) return -1; + CV_Assert( i >= 0 ); if( i == 0 ) p->cleanupUMats(); if( arg.m ) @@ -2737,6 +2739,13 @@ int Kernel::set(int i, const KernelArg& arg) bool ptronly = (arg.flags & KernelArg::PTR_ONLY) != 0; cl_mem h = (cl_mem)arg.m->handle(accessFlags); + if (!h) + { + p->release(); + p = 0; + return -1; + } + if (ptronly) clSetKernelArg(p->handle, (cl_uint)i++, sizeof(h), &h); else if( arg.m->dims <= 2 ) -- 2.7.4