summaryrefslogtreecommitdiffstats
path: root/runtime/interpreter
diff options
context:
space:
mode:
authorAndreas Gampe <agampe@google.com>2015-04-01 14:49:06 -0700
committerAndreas Gampe <agampe@google.com>2015-04-01 14:49:06 -0700
commitaacc25d54c3224cd9e26fdabe6c8444f5443b350 (patch)
tree2d989997b59c6650d2e85876f3e2d0ce1d1a4275 /runtime/interpreter
parenta703a7280a5081dd4e6f7e0d3860748f8a29965e (diff)
downloadart-aacc25d54c3224cd9e26fdabe6c8444f5443b350.tar.gz
art-aacc25d54c3224cd9e26fdabe6c8444f5443b350.tar.bz2
art-aacc25d54c3224cd9e26fdabe6c8444f5443b350.zip
ART: Fix unstarted runtime
Correctly delete local refs for dex/direct-byte-buffer. Change-Id: Ia74dfafb959d69aa281af7316f393997e053a3b3
Diffstat (limited to 'runtime/interpreter')
-rw-r--r--runtime/interpreter/unstarted_runtime.cc19
1 files changed, 12 insertions, 7 deletions
diff --git a/runtime/interpreter/unstarted_runtime.cc b/runtime/interpreter/unstarted_runtime.cc
index 1b08e80495..281f33238a 100644
--- a/runtime/interpreter/unstarted_runtime.cc
+++ b/runtime/interpreter/unstarted_runtime.cc
@@ -19,6 +19,8 @@
#include <cmath>
#include <unordered_map>
+#include "ScopedLocalRef.h"
+
#include "base/logging.h"
#include "base/macros.h"
#include "class_linker.h"
@@ -467,18 +469,21 @@ static mirror::Object* GetDexFromDexCache(Thread* self, mirror::DexCache* dex_ca
JNIEnv* env = self->GetJniEnv();
DCHECK(env != nullptr);
void* address = const_cast<void*>(reinterpret_cast<const void*>(dex_file->Begin()));
- jobject byte_buffer = env->NewDirectByteBuffer(address, dex_file->Size());
- if (byte_buffer == nullptr) {
+ ScopedLocalRef<jobject> byte_buffer(env, env->NewDirectByteBuffer(address, dex_file->Size()));
+ if (byte_buffer.get() == nullptr) {
DCHECK(self->IsExceptionPending());
return nullptr;
}
jvalue args[1];
- args[0].l = byte_buffer;
- return self->DecodeJObject(
- env->CallStaticObjectMethodA(WellKnownClasses::com_android_dex_Dex,
- WellKnownClasses::com_android_dex_Dex_create,
- args));
+ args[0].l = byte_buffer.get();
+
+ ScopedLocalRef<jobject> dex(env, env->CallStaticObjectMethodA(
+ WellKnownClasses::com_android_dex_Dex,
+ WellKnownClasses::com_android_dex_Dex_create,
+ args));
+
+ return self->DecodeJObject(dex.get());
}
static void UnstartedDexCacheGetDexNative(