diff options
author | Patrick Scott <> | 2009-03-24 22:40:29 -0700 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2009-03-24 22:40:29 -0700 |
commit | d0f504d63d255cc7d9acd429f7f9506befef4a61 (patch) | |
tree | b9044acc454bf048b8b4222cc9e7c5ddabc10269 | |
parent | 6d20683c4bff963e2e8ca340cd968db81a9b81ec (diff) | |
download | external_webkit-d0f504d63d255cc7d9acd429f7f9506befef4a61.zip external_webkit-d0f504d63d255cc7d9acd429f7f9506befef4a61.tar.gz external_webkit-d0f504d63d255cc7d9acd429f7f9506befef4a61.tar.bz2 |
Automated import from //branches/donutburger/...@142403,142403
-rw-r--r-- | WebCore/bridge/jni/jni_class.cpp | 5 | ||||
-rw-r--r-- | WebCore/bridge/jni/jni_runtime.cpp | 3 | ||||
-rw-r--r-- | WebCore/bridge/jni/jni_utility.h | 3 | ||||
-rw-r--r-- | WebKit/android/jni/WebCoreFrameBridge.cpp | 14 | ||||
-rw-r--r-- | WebKit/android/jni/WebCoreJni.h | 7 |
5 files changed, 25 insertions, 7 deletions
diff --git a/WebCore/bridge/jni/jni_class.cpp b/WebCore/bridge/jni/jni_class.cpp index 87750aa..4e3b5f9 100644 --- a/WebCore/bridge/jni/jni_class.cpp +++ b/WebCore/bridge/jni/jni_class.cpp @@ -85,6 +85,11 @@ JavaClass::JavaClass(jobject anInstance) methodList->append(aMethod); env->DeleteLocalRef(aJMethod); } +#ifdef ANDROID_FIX + env->DeleteLocalRef(fields); + env->DeleteLocalRef(methods); + env->DeleteLocalRef(aClass); +#endif } JavaClass::~JavaClass() { diff --git a/WebCore/bridge/jni/jni_runtime.cpp b/WebCore/bridge/jni/jni_runtime.cpp index 932e56c..38d6d6c 100644 --- a/WebCore/bridge/jni/jni_runtime.cpp +++ b/WebCore/bridge/jni/jni_runtime.cpp @@ -284,6 +284,9 @@ JavaMethod::JavaMethod (JNIEnv *env, jobject aMethod) jclass modifierClass = env->FindClass("java/lang/reflect/Modifier"); int modifiers = callJNIMethod<jint>(aMethod, "getModifiers", "()I"); _isStatic = (bool)callJNIStaticMethod<jboolean>(modifierClass, "isStatic", "(I)Z", modifiers); +#ifdef ANDROID_FIX + env->DeleteLocalRef(modifierClass); +#endif } JavaMethod::~JavaMethod() diff --git a/WebCore/bridge/jni/jni_utility.h b/WebCore/bridge/jni/jni_utility.h index a08cc5d..e76570c 100644 --- a/WebCore/bridge/jni/jni_utility.h +++ b/WebCore/bridge/jni/jni_utility.h @@ -216,6 +216,9 @@ static T callJNIMethodV(jobject obj, const char *name, const char *sig, va_list jmethodID mid = env->GetMethodID(cls, name, sig); if ( mid != NULL ) { +#ifdef ANDROID_FIX // Avoids references to cls without popping the local frame. + env->DeleteLocalRef(cls); +#endif return JNICaller<T>::callV(obj, mid, args); } else diff --git a/WebKit/android/jni/WebCoreFrameBridge.cpp b/WebKit/android/jni/WebCoreFrameBridge.cpp index ccca088..91103fb 100644 --- a/WebKit/android/jni/WebCoreFrameBridge.cpp +++ b/WebKit/android/jni/WebCoreFrameBridge.cpp @@ -953,10 +953,10 @@ protected: JNIEnv* env = getJNIEnv(); // This is odd. getRealObject returns an AutoJObject which is used to // cleanly create and delete a local reference. But, here we need to - // maintain the local reference across calls to strong() and weak(). - // So, create a new local reference to the real object here and delete - // it in weak(). - _realObject = env->NewLocalRef(getRealObject(env, _weakRef).get()); + // maintain the local reference across calls to virtualBegin() and + // virtualEnd(). So, release the local reference from the AutoJObject + // and delete the local reference in virtualEnd(). + _realObject = getRealObject(env, _weakRef).release(); // Point to the real object _instance->_instance = _realObject; // Call the base class method @@ -964,12 +964,12 @@ protected: } virtual void virtualEnd() { - // Get rid of the local reference to the real object + // Call the base class method first to pop the local frame. + INHERITED::virtualEnd(); + // Get rid of the local reference to the real object. getJNIEnv()->DeleteLocalRef(_realObject); // Point back to the WeakReference. _instance->_instance = _weakRef; - // Call the base class method - INHERITED::virtualEnd(); } private: diff --git a/WebKit/android/jni/WebCoreJni.h b/WebKit/android/jni/WebCoreJni.h index d6e48c7..0b55497 100644 --- a/WebKit/android/jni/WebCoreJni.h +++ b/WebKit/android/jni/WebCoreJni.h @@ -42,6 +42,13 @@ public: jobject get() const { return m_obj; } + // Releases the local reference to the caller. The caller *must* delete the + // local reference when it is done with it. + jobject release() { + jobject obj = m_obj; + m_obj = 0; + return obj; + } JNIEnv* env() const { return m_env; } |