diff options
-rw-r--r-- | dalvik/src/main/java/dalvik/system/BaseDexClassLoader.java | 2 | ||||
-rw-r--r-- | include/ScopedLocalRef.h | 20 |
2 files changed, 14 insertions, 8 deletions
diff --git a/dalvik/src/main/java/dalvik/system/BaseDexClassLoader.java b/dalvik/src/main/java/dalvik/system/BaseDexClassLoader.java index ab24f0b84..5782fd988 100644 --- a/dalvik/src/main/java/dalvik/system/BaseDexClassLoader.java +++ b/dalvik/src/main/java/dalvik/system/BaseDexClassLoader.java @@ -58,7 +58,7 @@ public class BaseDexClassLoader extends ClassLoader { Class clazz = pathList.findClass(name); if (clazz == null) { - throw new ClassNotFoundException(name); + throw new ClassNotFoundException("Didn't find class \"" + name + "\" on path: " + originalPath); } return clazz; diff --git a/include/ScopedLocalRef.h b/include/ScopedLocalRef.h index 84ee11a95..e239b9e52 100644 --- a/include/ScopedLocalRef.h +++ b/include/ScopedLocalRef.h @@ -23,22 +23,28 @@ template<typename T> class ScopedLocalRef { public: - ScopedLocalRef(JNIEnv* env, T localRef) - : mEnv(env), mLocalRef(localRef) - { + ScopedLocalRef(JNIEnv* env, T localRef) : mEnv(env), mLocalRef(localRef) { } ~ScopedLocalRef() { reset(); } - void reset() { - if (mLocalRef != NULL) { - mEnv->DeleteLocalRef(mLocalRef); - mLocalRef = NULL; + void reset(T ptr = NULL) { + if (ptr != mLocalRef) { + if (mLocalRef != NULL) { + mEnv->DeleteLocalRef(mLocalRef); + } + mLocalRef = ptr; } } + T release() __attribute__((warn_unused_result)) { + T localRef = mLocalRef; + mLocalRef = NULL; + return localRef; + } + T get() const { return mLocalRef; } |