From 79e423def6c516d22fa9cf741a14cdb0f42ed6fc Mon Sep 17 00:00:00 2001
From: CoreRasurae <luis.p.mendes@gmail.com>
Date: Thu, 22 Aug 2019 11:56:50 +0100
Subject: [PATCH] Refactor: Refactored ArrayBuffer class and Aparapi.cpp to
 make it more OO in terms of concerns separation (cont.)

---
 src/cpp/runKernel/ArrayBuffer.cpp |  8 +++++---
 src/cpp/runKernel/JNIContext.cpp  | 13 +------------
 2 files changed, 6 insertions(+), 15 deletions(-)

diff --git a/src/cpp/runKernel/ArrayBuffer.cpp b/src/cpp/runKernel/ArrayBuffer.cpp
index 55be9eb..895220f 100644
--- a/src/cpp/runKernel/ArrayBuffer.cpp
+++ b/src/cpp/runKernel/ArrayBuffer.cpp
@@ -94,10 +94,10 @@ void ArrayBuffer::syncMinimalParams(JNIEnv *jenv, KernelArg *arg) {
 void ArrayBuffer::replaceJavaArray(JNIEnv *jenv, KernelArg *arg, jarray newRef) {
    cl_int status = CL_SUCCESS;
     if (javaArray != NULL) {
-        jenv->DeleteWeakGlobalRef((jweak) javaArray);
         if (config->isVerbose()){
              fprintf(stderr, "DeleteWeakGlobalRef for %s: %p\n", arg->name, javaArray);
         }
+        jenv->DeleteWeakGlobalRef((jweak) javaArray);
         javaArray = 0;
     }
 
@@ -109,6 +109,7 @@ void ArrayBuffer::replaceJavaArray(JNIEnv *jenv, KernelArg *arg, jarray newRef)
         }
         status = clReleaseMemObject((cl_mem)mem);
         //fprintf(stderr, "<--releaseMemObject[%d]\n", i);
+        CLException::checkCLError(status, "clReleaseMemObject()");
         if(status != CL_SUCCESS) throw CLException(status, "clReleaseMemObject()");
         mem = (cl_mem)0;
      }
@@ -131,11 +132,11 @@ void ArrayBuffer::replaceJavaArray(JNIEnv *jenv, KernelArg *arg, jarray newRef)
 void ArrayBuffer::deleteJavaArray(JNIEnv *jenv, KernelArg *arg) {
    cl_int status = CL_SUCCESS;
     if (javaArray != NULL) {
-        jenv->DeleteWeakGlobalRef((jweak) ArrayBuffer::javaArray);
         if (config->isVerbose()){
              fprintf(stderr, "DeleteWeakGlobalRef for %s: %p\n", arg->name, ArrayBuffer::javaArray);
         }
-        javaArray = 0;
+        jenv->DeleteWeakGlobalRef((jweak) ArrayBuffer::javaArray);
+        javaArray=0;
     }
 
     // need to free opencl buffers, run will reallocate later
@@ -146,6 +147,7 @@ void ArrayBuffer::deleteJavaArray(JNIEnv *jenv, KernelArg *arg) {
         }
         status = clReleaseMemObject((cl_mem)mem);
         //fprintf(stderr, "<--releaseMemObject[%d]\n", i);
+        CLException::checkCLError(status, "clReleaseMemObject()");        
         if(status != CL_SUCCESS) throw CLException(status, "clReleaseMemObject()");
         mem = (cl_mem)0;
      }
diff --git a/src/cpp/runKernel/JNIContext.cpp b/src/cpp/runKernel/JNIContext.cpp
index 0056c77..569fc9a 100644
--- a/src/cpp/runKernel/JNIContext.cpp
+++ b/src/cpp/runKernel/JNIContext.cpp
@@ -86,18 +86,7 @@ void JNIContext::dispose(JNIEnv *jenv, Config* config) {
          if (!arg->isPrimitive()){
             if (arg->isArray()) {
                if (arg->arrayBuffer != NULL){
-                  if (arg->arrayBuffer->mem != 0){
-                     if (config->isTrackingOpenCLResources()){
-                        memList.remove((cl_mem)arg->arrayBuffer->mem, __LINE__, __FILE__);
-                     }
-                     status = clReleaseMemObject((cl_mem)arg->arrayBuffer->mem);
-                     //fprintf(stdout, "dispose arg %d %0lx\n", i, arg->arrayBuffer->mem);
-                     CLException::checkCLError(status, "clReleaseMemObject()");
-                     arg->arrayBuffer->mem = (cl_mem)0;
-                  }
-                  if (arg->arrayBuffer->javaArray != NULL)  {
-                     jenv->DeleteWeakGlobalRef((jweak) arg->arrayBuffer->javaArray);
-                  }
+                  arg->arrayBuffer->deleteJavaArray(jenv, arg);
                   delete arg->arrayBuffer;
                   arg->arrayBuffer = NULL;
                }
-- 
GitLab