ART: Temporarily use global references for GetLoadedClasses
Until we have enough local references, use global references.
Bug: 31684578
Bug: 32125344
Test: m test-art-host
Change-Id: If95ecaf424cfc7e8a84c7f99b071ac5d6bfb7797
diff --git a/runtime/openjdkjvmti/heap.cc b/runtime/openjdkjvmti/heap.cc
index 745828a..859941c 100644
--- a/runtime/openjdkjvmti/heap.cc
+++ b/runtime/openjdkjvmti/heap.cc
@@ -21,6 +21,7 @@
#include "base/mutex.h"
#include "class_linker.h"
#include "gc/heap.h"
+#include "java_vm_ext.h"
#include "jni_env_ext.h"
#include "mirror/class.h"
#include "object_callbacks.h"
@@ -177,7 +178,8 @@
explicit ReportClassVisitor(art::Thread* self) : self_(self) {}
bool operator()(art::mirror::Class* klass) OVERRIDE REQUIRES_SHARED(art::Locks::mutator_lock_) {
- classes_.push_back(self_->GetJniEnv()->AddLocalReference<jclass>(klass));
+ art::JNIEnvExt* jni_env = self_->GetJniEnv();
+ classes_.push_back(reinterpret_cast<jclass>(jni_env->vm->AddGlobalRef(self_, klass)));
return true;
}
diff --git a/test/907-get-loaded-classes/get_loaded_classes.cc b/test/907-get-loaded-classes/get_loaded_classes.cc
index c0f7082..e752bcb 100644
--- a/test/907-get-loaded-classes/get_loaded_classes.cc
+++ b/test/907-get-loaded-classes/get_loaded_classes.cc
@@ -70,7 +70,7 @@
// 1) Free the local references.
// 2) Deallocate.
for (size_t i = 0; i < static_cast<size_t>(count); ++i) {
- env->DeleteLocalRef(classes[i]);
+ env->DeleteGlobalRef(classes[i]);
}
jvmti_env->Deallocate(reinterpret_cast<unsigned char*>(classes));