Release cl_mem&kernel after sumifs reduction kernel
Change-Id: Ibe2eccf92b5f8e7b12b5d885cb393238b16837b0
Signed-off-by: Your Name <you@example.com>
diff --git a/sc/source/core/opencl/formulagroupcl.cxx b/sc/source/core/opencl/formulagroupcl.cxx
index 665ab46..ee1b655 100644
--- a/sc/source/core/opencl/formulagroupcl.cxx
+++ b/sc/source/core/opencl/formulagroupcl.cxx
@@ -1458,7 +1458,7 @@ public:
DynamicKernelArgument *Arg = mvSubArguments[0].get();
DynamicKernelSlidingArgument<VectorRef> *slidingArgPtr =
dynamic_cast< DynamicKernelSlidingArgument<VectorRef> *> (Arg);
cl_mem mpClmem2;
mpClmem2 = NULL;
if (OpSumCodeGen->NeedReductionKernel())
{
@@ -1519,7 +1519,7 @@ public:
err = clFinish(kEnv.mpkCmdQueue);
if (CL_SUCCESS != err)
throw OpenCLError(err);
clReleaseKernel(redKernel);
// Pass mpClmem2 to the "real" kernel
err = clSetKernelArg(k, argno, sizeof(cl_mem), (void *)&mpClmem2);
if (CL_SUCCESS != err)
@@ -1616,7 +1616,16 @@ public:
for (unsigned i = 0; i < mvSubArguments.size(); i++)
mvSubArguments[i]->DumpInlineFun(decls,funs);
}
~DynamicKernelSoPArguments()
{
if (mpClmem2)
{
clReleaseMemObject(mpClmem2);
mpClmem2 = NULL;
}
}
private:
cl_mem mpClmem2;
SubArgumentsType mvSubArguments;
boost::shared_ptr<SlidingFunctionBase> mpCodeGen;
};
@@ -1676,7 +1685,7 @@ DynamicKernelArgument *VectorRefFactory(const std::string &s,
DynamicKernelSoPArguments::DynamicKernelSoPArguments(
const std::string &s, const FormulaTreeNodeRef& ft, SlidingFunctionBase* pCodeGen) :
DynamicKernelArgument(s, ft), mpCodeGen(pCodeGen)
DynamicKernelArgument(s, ft), mpCodeGen(pCodeGen),mpClmem2(NULL)
{
size_t nChildren = ft->Children.size();