OSDN Git Service

Merge change 8258 into donut
authorAndroid (Google) Code Review <android-gerrit@google.com>
Wed, 22 Jul 2009 22:34:57 +0000 (15:34 -0700)
committerAndroid (Google) Code Review <android-gerrit@google.com>
Wed, 22 Jul 2009 22:34:57 +0000 (15:34 -0700)
* changes:
  Minor fixes to CheckJNI.

vm/CheckJni.c

index 0601e72..a7378ba 100644 (file)
@@ -319,7 +319,7 @@ static void checkFieldType(jobject obj, jfieldID fieldID, PrimitiveType prim,
  * Verify that "obj" is a valid object, and that it's an object that JNI
  * is allowed to know about.  We allow NULL references.
  *
- * The caller should have switched to "running" mode before calling here.
+ * Switches to "running" mode before performing checks.
  */
 static void checkObject(JNIEnv* env, jobject obj, const char* func)
 {
@@ -328,6 +328,8 @@ static void checkObject(JNIEnv* env, jobject obj, const char* func)
 
     if (obj == NULL)
         return;
+
+    JNI_ENTER();
     if (!dvmIsValidObject(obj)) {
         LOGW("JNI WARNING: native code passing in bad object %p (%s)\n",
             obj, func);
@@ -341,6 +343,8 @@ static void checkObject(JNIEnv* env, jobject obj, const char* func)
         showLocation(dvmGetCurrentJNIMethod(), func);
         abortMaybe();
     }
+
+    JNI_EXIT();
 }
 
 /*
@@ -371,14 +375,13 @@ static void checkClass(JNIEnv* env, jclass jclazz, const char* func)
         LOGW("JNI WARNING: jclass does not point to class object (%p - %s)\n",
             jclazz, clazz->descriptor);
         printWarn = true;
-    } else {
-        checkObject(env, jclazz, func);
     }
+    JNI_EXIT();
 
     if (printWarn)
         abortMaybe();
-
-    JNI_EXIT();
+    else
+        checkObject(env, jclazz, func);
 }
 
 /*
@@ -403,14 +406,13 @@ static void checkString(JNIEnv* env, jstring str, const char* func)
         else
             LOGW("JNI WARNING: jstring %p is bogus (%s)\n", str, func);
         printWarn = true;
-    } else {
-        checkObject(env, str, func);
     }
+    JNI_EXIT();
 
     if (printWarn)
         abortMaybe();
-
-    JNI_EXIT();
+    else
+        checkObject(env, str, func);
 }
 
 /*
@@ -543,14 +545,14 @@ static void checkArray(JNIEnv* env, jarray array, const char* func)
         else
             LOGW("JNI WARNING: jarray is bogus (%p)\n", array);
         printWarn = true;
-    } else {
-        checkObject(env, array, func);
     }
 
+    JNI_EXIT();
+
     if (printWarn)
         abortMaybe();
-
-    JNI_EXIT();
+    else
+        checkObject(env, array, func);
 }
 
 /*
@@ -643,10 +645,12 @@ static void checkStaticFieldID(JNIEnv* env, jclass clazz, jfieldID fieldID)
 static void checkInstanceFieldID(JNIEnv* env, jobject obj, jfieldID fieldID,
     const char* func)
 {
+    JNI_ENTER();
+
     if (obj == NULL) {
         LOGW("JNI WARNING: invalid null object (%s)\n", func);
         abortMaybe();
-        return;
+        goto bail;
     }
 
     ClassObject* clazz = ((Object*)obj)->clazz;
@@ -659,7 +663,7 @@ static void checkInstanceFieldID(JNIEnv* env, jobject obj, jfieldID fieldID,
         if ((InstField*) fieldID >= clazz->ifields &&
             (InstField*) fieldID < clazz->ifields + clazz->ifieldCount)
         {
-            return;
+            goto bail;
         }
 
         clazz = clazz->super;
@@ -668,6 +672,9 @@ static void checkInstanceFieldID(JNIEnv* env, jobject obj, jfieldID fieldID,
     LOGW("JNI WARNING: inst fieldID %p not valid for class %s\n",
         fieldID, ((Object*)obj)->clazz->descriptor);
     abortMaybe();
+
+bail:
+    JNI_EXIT();
 }