summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2012-01-24 17:13:54 -0800
committerElliott Hughes <enh@google.com>2012-08-01 12:45:11 -0700
commit3bbe5318c343b1b7c945be717cc55b4ab15874f2 (patch)
treedc01fe006d2ab8d1e149ee6772f615ed73742bba /include
parent8588cab1581a385445714570c55eced54bdabd97 (diff)
downloadlibcore-3bbe5318c343b1b7c945be717cc55b4ab15874f2.zip
libcore-3bbe5318c343b1b7c945be717cc55b4ab15874f2.tar.gz
libcore-3bbe5318c343b1b7c945be717cc55b4ab15874f2.tar.bz2
Improve the BaseDexClassLoader detail message, and make ScopedLocalRef more unique_ptr-like.
(cherry-pick of 1c459db4ea31c1f284353bc71bfd2dbc97ca53d7.) Conflicts: include/ScopedLocalRef.h Change-Id: Id01cb907406cc93f6b0f6ddaa8e7fb3714d18c53
Diffstat (limited to 'include')
-rw-r--r--include/ScopedLocalRef.h20
1 files changed, 13 insertions, 7 deletions
diff --git a/include/ScopedLocalRef.h b/include/ScopedLocalRef.h
index 84ee11a..e239b9e 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;
}