]> rtime.felk.cvut.cz Git - orte.git/blobdiff - orte/libjorte/JORTEDomainAppDestroy.c
Reformat the sources with orte/uncrustify script
[orte.git] / orte / libjorte / JORTEDomainAppDestroy.c
index 570baefbf65e9665cbfc9a0ae61ba7acb8fd32b4..d7087cd16c5c68e3e87f18ca27aba89583e82b74 100644 (file)
   *
   */
 
+#include <stdlib.h>
 // origin orte headers
 #include "orte.h"
 // pregenerated header
 #include "jorte/org_ocera_orte_DomainApp.h"
 #include "jorte/4all.h"
+#include "jorte/jorte_typedefs_defines.h"
 
 JNIEXPORT jboolean JNICALL
 Java_org_ocera_orte_DomainApp_jORTEDomainAppDestroy
-(JNIEnv *env, jclass cls, jlong dhandle)
+  (JNIEnv *env, jobject obj, jlong dhandle)
 {
-  // check domain handle
-  if (dhandle == 0)
-  {
-    printf(":!c: ORTEDomainAppDestroy failed! [bad handle] \n");
+  jlong       h;
+  jclass      cls;
+  jfieldID    fid;
+  int         flag_ok = 0;
+
+  do {
+    // check domain handle
+    if (dhandle == 0) {
+      printf(":!c: ORTEDomainAppDestroy failed! [bad handle] \n");
+      break;
+    }
+    // call ORTE function
+    if (!ORTEDomainAppDestroy((ORTEDomain *)dhandle)) {
+      #ifdef TEST_STAGE
+      printf(":c: ORTEDomainAppDestroy failed.. \n");
+      #endif
+      break;
+    }
+
+    // free domainEvents object
+    // find cls
+    cls = (*env)->GetObjectClass(env, obj);
+    if (cls == 0) {
+      #ifdef TEST_STAGE
+      printf(":!c: cls = NULL! \n");
+      #endif
+      break;
+    }
+    // fieldID
+    fid = (*env)->GetFieldID(env,
+                            cls,
+                            "domainEventsContextHandle",
+                            "J");
+    if (fid == 0) {
+     #ifdef TEST_STAGE
+      printf(":!c: fid = NULL! \n");
+     #endif
+      break;
+    }
+    // get value
+    h = (*env)->GetLongField(env, obj, fid);
+    if (h) {
+      JORTEDomainEventsContext_t *ctx = (JORTEDomainEventsContext_t *)h;
+      if (ctx->obj_de) {
+       #ifdef TEST_STAGE
+       printf(":c: deleting ctx->obj_de \n");
+       #endif
+       (*env)->DeleteGlobalRef(env, ctx->obj_de);
+      }
+      //
+      free((void *)h);
+    }
+    flag_ok = 1;
+  } while (0);
+
+  if (flag_ok == 0) {
+    printf(":!c: ORTEDomainAppDestroy failed!  \n");
     return 0;
   }
-  // call ORTE function
-  if (ORTEDomainAppDestroy((ORTEDomain *) dhandle))
-  {
-    #ifdef TEST_STAGE
-       printf(":c: ORTEDomainAppDestroy successfull.. \n");
-    #endif
-    return 1;
-  }
-  printf(":!c: ORTEDomainAppDestroy failed!  \n");
-  return 0;
+
+  return 1;
 }