Index: base/android/jni_helper.cc |
diff --git a/base/android/jni_helper.cc b/base/android/jni_helper.cc |
index 5e9f4098501f96f590e40aba3f64ea1923085a44..3ff3bfb1dfb27cafd6499735f4c7b66e283510fa 100644 |
--- a/base/android/jni_helper.cc |
+++ b/base/android/jni_helper.cc |
@@ -15,8 +15,14 @@ JavaObjectWeakGlobalRef::JavaObjectWeakGlobalRef(JNIEnv* env, jobject obj) |
} |
JavaObjectWeakGlobalRef::~JavaObjectWeakGlobalRef() { |
- DCHECK(obj_); |
- AttachCurrentThread()->DeleteWeakGlobalRef(obj_); |
+ reset(); |
+} |
+ |
+void JavaObjectWeakGlobalRef::reset() { |
+ if (obj_) { |
+ AttachCurrentThread()->DeleteWeakGlobalRef(obj_); |
+ obj_ = NULL; |
+ } |
} |
base::android::ScopedJavaLocalRef<jobject> |
@@ -25,9 +31,12 @@ base::android::ScopedJavaLocalRef<jobject> |
} |
base::android::ScopedJavaLocalRef<jobject> GetRealObject( |
- JNIEnv* env, jobject obj) { |
- jobject real = env->NewLocalRef(obj); |
- if (!real) |
- DLOG(ERROR) << "The real object has been deleted!"; |
+ JNIEnv* env, jweak obj) { |
+ jobject real = NULL; |
+ if (obj) { |
+ real = env->NewLocalRef(obj); |
+ if (!real) |
+ DLOG(ERROR) << "The real object has been deleted!"; |
+ } |
return base::android::ScopedJavaLocalRef<jobject>(env, real); |
} |