diff --git a/com.amd.aparapi.jni/src/cpp/invoke/OpenCLJNI.cpp b/com.amd.aparapi.jni/src/cpp/invoke/OpenCLJNI.cpp
index e985bd18b5af6fbe988c5009ebb9ea263aaa1f6b..a0916bc09544bb6077dcc1ed55da0f22549374e8 100644
--- a/com.amd.aparapi.jni/src/cpp/invoke/OpenCLJNI.cpp
+++ b/com.amd.aparapi.jni/src/cpp/invoke/OpenCLJNI.cpp
@@ -252,9 +252,13 @@ void getArg(JNIEnv *jenv, cl_context context, cl_command_queue commandQueue, cl_
JNI_JAVA(void, OpenCLJNI, disposeProgram)
(JNIEnv *jenv, jobject jobj, jobject programInstance) {
- fprintf(stderr, "dispose program \n");
+ //fprintf(stderr, "dispose program \n");
cl_program program = OpenCLProgram::getProgram(jenv, programInstance);
clReleaseProgram(program);
+ cl_command_queue commandQueue = OpenCLProgram::getCommandQueue(jenv, programInstance);
+ clReleaseCommandQueue(commandQueue);
+ cl_context context = OpenCLProgram::getContext(jenv, programInstance);
+ clReleaseContext(context);
}
JNI_JAVA(void, OpenCLJNI, disposeKernel)
@@ -267,7 +271,7 @@ JNI_JAVA(void, OpenCLJNI, disposeKernel)
cl_context context = OpenCLProgram::getContext(jenv, programInstance);
cl_command_queue commandQueue = OpenCLProgram::getCommandQueue(jenv, programInstance);
jsize argc = jenv->GetArrayLength(argDefsArray);
- fprintf(stderr, "dispose! argc = %d\n", argc);
+ //fprintf(stderr, "dispose! argc = %d\n", argc);
for (jsize argIndex = 0; argIndex < argc; argIndex++){
jobject argDef = jenv->GetObjectArrayElement(argDefsArray, argIndex);
jlong argBits = OpenCLArgDescriptor::getBits(jenv, argDef);
@@ -279,7 +283,7 @@ JNI_JAVA(void, OpenCLJNI, disposeKernel)
cl_mem mem = OpenCLMem::getMem(jenv, memInstance);
size_t sizeInBytes = OpenCLMem::getSizeInBytes(jenv, memInstance);
cl_int status = clReleaseMemObject(mem);
- fprintf(stderr, "mem instance %d released!\n", sizeInBytes);
+ //fprintf(stderr, "mem instance %d released!\n", sizeInBytes);
}
}
}
@@ -365,6 +369,9 @@ JNI_JAVA(void, OpenCLJNI, invoke)
getArg(jenv, context, commandQueue, events, &eventc, argIndex, argDef, arg);
}
status = clWaitForEvents(eventc, events);
+ for (int i=0;i<eventc; i++){
+ clReleaseEvent(events[i]);
+ }
if (status != CL_SUCCESS) {
fprintf(stderr, "error waiting for events !\n");
}