fixed potential issue for Android JNI
authorjihwan.seo <jihwan.seo@samsung.com>
Wed, 31 Aug 2016 04:11:48 +0000 (13:11 +0900)
committerJon A. Cruz <jon@joncruz.org>
Wed, 31 Aug 2016 20:04:38 +0000 (20:04 +0000)
Change-Id: I798b87fde00886061f53536c8c464e1cf7861e0d
Signed-off-by: jihwan.seo <jihwan.seo@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/11171
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Jon A. Cruz <jon@joncruz.org>
android/android_api/base/jni/JniOcPlatform.cpp
android/android_api/base/jni/JniOcPresenceHandle.cpp
android/android_api/base/jni/JniOcStack.cpp

index 4a5c846..f5200ae 100644 (file)
@@ -581,7 +581,7 @@ void RemoveOnPublishResourceListener(JNIEnv* env, jobject jListener)
 {
     if (!env)
     {
-        ThrowOcException(JNI_EXCEPTION, "env is null");
+        LOGE("env is null");
         return;
     }
 
@@ -664,7 +664,7 @@ void RemoveOnDeleteResourceListener(JNIEnv* env, jobject jListener)
 {
     if (!env)
     {
-        ThrowOcException(JNI_EXCEPTION, "env is null");
+        LOGE("env is null");
         return;
     }
 
@@ -2712,7 +2712,7 @@ JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_publishResourceToRD1(
 #ifdef RD_CLIENT
     if (!env)
     {
-        ThrowOcException(OC_STACK_INVALID_PARAM, "env is null");
+        LOGE("env is null");
         return;
     }
     std::string host;
@@ -2862,7 +2862,7 @@ JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_deleteResourceFromRD1(
 #ifdef RD_CLIENT
     if (!env)
     {
-        ThrowOcException(OC_STACK_INVALID_PARAM, "env is null");
+        LOGE("env is null");
         return;
     }
     std::string host;
index 22e2896..9d74e23 100644 (file)
 #include "OCPlatform.h"
 
 JniOcPresenceHandle::JniOcPresenceHandle(JniOnPresenceListener* jniListener, OCPresenceHandle presenceHandle)
-    : m_jniListener(jniListener), m_presenceHandle(presenceHandle)
+    : m_jniListener(jniListener), m_presenceHandle(presenceHandle), m_jniObserveListener(nullptr)
 {
 }
 
 JniOcPresenceHandle::JniOcPresenceHandle(JniOnObserveListener* jniListener, OCPresenceHandle presenceHandle)
-    : m_jniObserveListener(jniListener), m_presenceHandle(presenceHandle)
+    : m_jniObserveListener(jniListener), m_presenceHandle(presenceHandle), m_jniListener(nullptr)
 {
 }
 
index c33e2d5..06de766 100644 (file)
@@ -601,47 +601,49 @@ JNIEXPORT void JNICALL JNI_OnUnload(JavaVM *vm, void *reserved)
         return;
     }
 
-
-    env->DeleteGlobalRef(g_cls_Integer);
-    env->DeleteGlobalRef(g_cls_int1DArray);
-    env->DeleteGlobalRef(g_cls_int2DArray);
-    env->DeleteGlobalRef(g_cls_Double);
-    env->DeleteGlobalRef(g_cls_double1DArray);
-    env->DeleteGlobalRef(g_cls_double2DArray);
-    env->DeleteGlobalRef(g_cls_Boolean);
-    env->DeleteGlobalRef(g_cls_boolean1DArray);
-    env->DeleteGlobalRef(g_cls_boolean2DArray);
-    env->DeleteGlobalRef(g_cls_String);
-    env->DeleteGlobalRef(g_cls_String1DArray);
-    env->DeleteGlobalRef(g_cls_String2DArray);
-    env->DeleteGlobalRef(g_cls_LinkedList);
-    env->DeleteGlobalRef(g_cls_Map);
-    env->DeleteGlobalRef(g_cls_MapEntry);
-    env->DeleteGlobalRef(g_cls_Set);
-    env->DeleteGlobalRef(g_cls_Iterator);
-    env->DeleteGlobalRef(g_cls_HashMap);
-    env->DeleteGlobalRef(g_cls_OcResource);
-    env->DeleteGlobalRef(g_cls_OcException);
-    env->DeleteGlobalRef(g_cls_OcRepresentation);
-    env->DeleteGlobalRef(g_cls_OcRepresentation1DArray);
-    env->DeleteGlobalRef(g_cls_OcRepresentation2DArray);
-    env->DeleteGlobalRef(g_cls_OcResourceRequest);
-    env->DeleteGlobalRef(g_cls_OcResourceResponse);
-    env->DeleteGlobalRef(g_cls_OcResourceHandle);
-    env->DeleteGlobalRef(g_cls_OcPresenceHandle);
-    env->DeleteGlobalRef(g_cls_OcRequestHandle);
-    env->DeleteGlobalRef(g_cls_OcPresenceStatus);
-    env->DeleteGlobalRef(g_cls_OcHeaderOption);
-    env->DeleteGlobalRef(g_cls_ObservationInfo);
-    env->DeleteGlobalRef(g_cls_OcResourceIdentifier);
-    env->DeleteGlobalRef(g_cls_OcSecureResource);
-    env->DeleteGlobalRef(g_cls_OcProvisionResult);
-    env->DeleteGlobalRef(g_cls_OcDirectPairDevice);
+    if (env)
+    {
+        env->DeleteGlobalRef(g_cls_Integer);
+        env->DeleteGlobalRef(g_cls_int1DArray);
+        env->DeleteGlobalRef(g_cls_int2DArray);
+        env->DeleteGlobalRef(g_cls_Double);
+        env->DeleteGlobalRef(g_cls_double1DArray);
+        env->DeleteGlobalRef(g_cls_double2DArray);
+        env->DeleteGlobalRef(g_cls_Boolean);
+        env->DeleteGlobalRef(g_cls_boolean1DArray);
+        env->DeleteGlobalRef(g_cls_boolean2DArray);
+        env->DeleteGlobalRef(g_cls_String);
+        env->DeleteGlobalRef(g_cls_String1DArray);
+        env->DeleteGlobalRef(g_cls_String2DArray);
+        env->DeleteGlobalRef(g_cls_LinkedList);
+        env->DeleteGlobalRef(g_cls_Map);
+        env->DeleteGlobalRef(g_cls_MapEntry);
+        env->DeleteGlobalRef(g_cls_Set);
+        env->DeleteGlobalRef(g_cls_Iterator);
+        env->DeleteGlobalRef(g_cls_HashMap);
+        env->DeleteGlobalRef(g_cls_OcResource);
+        env->DeleteGlobalRef(g_cls_OcException);
+        env->DeleteGlobalRef(g_cls_OcRepresentation);
+        env->DeleteGlobalRef(g_cls_OcRepresentation1DArray);
+        env->DeleteGlobalRef(g_cls_OcRepresentation2DArray);
+        env->DeleteGlobalRef(g_cls_OcResourceRequest);
+        env->DeleteGlobalRef(g_cls_OcResourceResponse);
+        env->DeleteGlobalRef(g_cls_OcResourceHandle);
+        env->DeleteGlobalRef(g_cls_OcPresenceHandle);
+        env->DeleteGlobalRef(g_cls_OcRequestHandle);
+        env->DeleteGlobalRef(g_cls_OcPresenceStatus);
+        env->DeleteGlobalRef(g_cls_OcHeaderOption);
+        env->DeleteGlobalRef(g_cls_ObservationInfo);
+        env->DeleteGlobalRef(g_cls_OcResourceIdentifier);
+        env->DeleteGlobalRef(g_cls_OcSecureResource);
+        env->DeleteGlobalRef(g_cls_OcProvisionResult);
+        env->DeleteGlobalRef(g_cls_OcDirectPairDevice);
 #ifdef WITH_CLOUD
-    env->DeleteGlobalRef(g_cls_OcAccountManager);
+        env->DeleteGlobalRef(g_cls_OcAccountManager);
 #endif
-    env->DeleteGlobalRef(g_cls_OcOicSecAcl);
-    env->DeleteGlobalRef(g_cls_OcOicSecAcl_ace);
-    env->DeleteGlobalRef(g_cls_OcOicSecAcl_resr);
-    env->DeleteGlobalRef(g_cls_OcOicSecAcl_validity);
+        env->DeleteGlobalRef(g_cls_OcOicSecAcl);
+        env->DeleteGlobalRef(g_cls_OcOicSecAcl_ace);
+        env->DeleteGlobalRef(g_cls_OcOicSecAcl_resr);
+        env->DeleteGlobalRef(g_cls_OcOicSecAcl_validity);
+    }
 }