diff options
author | nileshagrawal@chromium.org <nileshagrawal@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-04-09 09:07:13 +0000 |
---|---|---|
committer | nileshagrawal@chromium.org <nileshagrawal@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-04-09 09:07:13 +0000 |
commit | a862b97f3c826da2d5a1d8926d2780a91fc2c833 (patch) | |
tree | d0b26de62a670e9d3a0edbe3262a886a8c68cb4d | |
parent | e641603377cbaf89e1ddaec9a8e9db8272b92aa4 (diff) | |
download | chromium_src-a862b97f3c826da2d5a1d8926d2780a91fc2c833.zip chromium_src-a862b97f3c826da2d5a1d8926d2780a91fc2c833.tar.gz chromium_src-a862b97f3c826da2d5a1d8926d2780a91fc2c833.tar.bz2 |
Android: Use scoped local ref in jni_generator.
Using GetUnscopedClass can cause "local reference table overflow" in dalvikvm if RegisterNatives is called too many times. This showed up in cc_unittests where multiple calls to init the media library caused an overflow.
BUG=229261
Review URL: https://chromiumcodereview.appspot.com/13885002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@193052 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | base/android/jni_generator/golden_sample_for_tests_jni.h | 6 | ||||
-rwxr-xr-x | base/android/jni_generator/jni_generator.py | 2 | ||||
-rwxr-xr-x | base/android/jni_generator/jni_generator_tests.py | 14 |
3 files changed, 11 insertions, 11 deletions
diff --git a/base/android/jni_generator/golden_sample_for_tests_jni.h b/base/android/jni_generator/golden_sample_for_tests_jni.h index bba64ba..2c5f6c0 100644 --- a/base/android/jni_generator/golden_sample_for_tests_jni.h +++ b/base/android/jni_generator/golden_sample_for_tests_jni.h @@ -301,11 +301,11 @@ static ScopedJavaLocalRef<jstring> Java_InnerStructB_getValue(JNIEnv* env, static bool RegisterNativesImpl(JNIEnv* env) { g_InnerStructA_clazz = reinterpret_cast<jclass>(env->NewGlobalRef( - base::android::GetUnscopedClass(env, kInnerStructAClassPath))); + base::android::GetClass(env, kInnerStructAClassPath).obj())); g_SampleForTests_clazz = reinterpret_cast<jclass>(env->NewGlobalRef( - base::android::GetUnscopedClass(env, kSampleForTestsClassPath))); + base::android::GetClass(env, kSampleForTestsClassPath).obj())); g_InnerStructB_clazz = reinterpret_cast<jclass>(env->NewGlobalRef( - base::android::GetUnscopedClass(env, kInnerStructBClassPath))); + base::android::GetClass(env, kInnerStructBClassPath).obj())); static const JNINativeMethod kMethodsSampleForTests[] = { { "nativeInit", "(" diff --git a/base/android/jni_generator/jni_generator.py b/base/android/jni_generator/jni_generator.py index a6475e5..f71f553 100755 --- a/base/android/jni_generator/jni_generator.py +++ b/base/android/jni_generator/jni_generator.py @@ -878,7 +878,7 @@ jclass g_${JAVA_CLASS}_clazz = NULL;""") """Returns the imlementation of FindClass for all known classes.""" template = Template("""\ g_${JAVA_CLASS}_clazz = reinterpret_cast<jclass>(env->NewGlobalRef( - base::android::GetUnscopedClass(env, k${JAVA_CLASS}ClassPath)));""") + base::android::GetClass(env, k${JAVA_CLASS}ClassPath).obj()));""") ret = [] for clazz in self.GetUniqueClasses(self.called_by_natives): values = {'JAVA_CLASS': clazz} diff --git a/base/android/jni_generator/jni_generator_tests.py b/base/android/jni_generator/jni_generator_tests.py index 6d539ad..f6dd3c9 100755 --- a/base/android/jni_generator/jni_generator_tests.py +++ b/base/android/jni_generator/jni_generator_tests.py @@ -325,7 +325,7 @@ static void GotOrientation(JNIEnv* env, jobject obj, static bool RegisterNativesImpl(JNIEnv* env) { g_TestJni_clazz = reinterpret_cast<jclass>(env->NewGlobalRef( - base::android::GetUnscopedClass(env, kTestJniClassPath))); + base::android::GetClass(env, kTestJniClassPath).obj())); static const JNINativeMethod kMethodsTestJni[] = { { "nativeInit", "(" @@ -483,7 +483,7 @@ static jint Init(JNIEnv* env, jobject obj); static bool RegisterNativesImpl(JNIEnv* env) { g_TestJni_clazz = reinterpret_cast<jclass>(env->NewGlobalRef( - base::android::GetUnscopedClass(env, kTestJniClassPath))); + base::android::GetClass(env, kTestJniClassPath).obj())); static const JNINativeMethod kMethodsMyInnerClass[] = { { "nativeInit", "(" @@ -574,7 +574,7 @@ static jint Init(JNIEnv* env, jobject obj); static bool RegisterNativesImpl(JNIEnv* env) { g_TestJni_clazz = reinterpret_cast<jclass>(env->NewGlobalRef( - base::android::GetUnscopedClass(env, kTestJniClassPath))); + base::android::GetClass(env, kTestJniClassPath).obj())); static const JNINativeMethod kMethodsMyOtherInnerClass[] = { { "nativeInit", "(" @@ -679,7 +679,7 @@ static jint Init(JNIEnv* env, jobject obj); static bool RegisterNativesImpl(JNIEnv* env) { g_TestJni_clazz = reinterpret_cast<jclass>(env->NewGlobalRef( - base::android::GetUnscopedClass(env, kTestJniClassPath))); + base::android::GetClass(env, kTestJniClassPath).obj())); static const JNINativeMethod kMethodsMyOtherInnerClass[] = { { "nativeInit", "(" @@ -1505,9 +1505,9 @@ static ScopedJavaLocalRef<jobject> Java_TestJni_getCompressFormatList(JNIEnv* static bool RegisterNativesImpl(JNIEnv* env) { g_TestJni_clazz = reinterpret_cast<jclass>(env->NewGlobalRef( - base::android::GetUnscopedClass(env, kTestJniClassPath))); + base::android::GetClass(env, kTestJniClassPath).obj())); g_InfoBar_clazz = reinterpret_cast<jclass>(env->NewGlobalRef( - base::android::GetUnscopedClass(env, kInfoBarClassPath))); + base::android::GetClass(env, kInfoBarClassPath).obj())); return true; } @@ -1870,7 +1870,7 @@ static ScopedJavaLocalRef<jobject> Java_InputStream_Constructor(JNIEnv* env) { static bool RegisterNativesImpl(JNIEnv* env) { g_InputStream_clazz = reinterpret_cast<jclass>(env->NewGlobalRef( - base::android::GetUnscopedClass(env, kInputStreamClassPath))); + base::android::GetClass(env, kInputStreamClassPath).obj())); return true; } } // namespace JNI_InputStream |