summaryrefslogtreecommitdiff
path: root/openjdkjvmti/ti_threadgroup.cc
diff options
context:
space:
mode:
Diffstat (limited to 'openjdkjvmti/ti_threadgroup.cc')
-rw-r--r--openjdkjvmti/ti_threadgroup.cc20
1 files changed, 11 insertions, 9 deletions
diff --git a/openjdkjvmti/ti_threadgroup.cc b/openjdkjvmti/ti_threadgroup.cc
index e17e61fe62..bc912cf6a5 100644
--- a/openjdkjvmti/ti_threadgroup.cc
+++ b/openjdkjvmti/ti_threadgroup.cc
@@ -99,7 +99,10 @@ jvmtiError ThreadGroupUtil::GetThreadGroupInfo(jvmtiEnv* env,
return ERR(INVALID_THREAD_GROUP);
}
- art::ObjPtr<art::mirror::Object> obj = soa.Decode<art::mirror::Object>(group);
+ art::StackHandleScope<2> hs(soa.Self());
+ art::Handle<art::mirror::Class> tg_class(
+ hs.NewHandle(soa.Decode<art::mirror::Class>(art::WellKnownClasses::java_lang_ThreadGroup)));
+ art::Handle<art::mirror::Object> obj(hs.NewHandle(soa.Decode<art::mirror::Object>(group)));
// Do the name first. It's the only thing that can fail.
{
@@ -107,7 +110,7 @@ jvmtiError ThreadGroupUtil::GetThreadGroupInfo(jvmtiEnv* env,
art::jni::DecodeArtField(art::WellKnownClasses::java_lang_ThreadGroup_name);
CHECK(name_field != nullptr);
art::ObjPtr<art::mirror::String> name_obj =
- art::ObjPtr<art::mirror::String>::DownCast(name_field->GetObject(obj));
+ art::ObjPtr<art::mirror::String>::DownCast(name_field->GetObject(obj.Get()));
std::string tmp_str;
const char* tmp_cstr;
if (name_obj == nullptr) {
@@ -129,7 +132,7 @@ jvmtiError ThreadGroupUtil::GetThreadGroupInfo(jvmtiEnv* env,
art::ArtField* parent_field =
art::jni::DecodeArtField(art::WellKnownClasses::java_lang_ThreadGroup_parent);
CHECK(parent_field != nullptr);
- art::ObjPtr<art::mirror::Object> parent_group = parent_field->GetObject(obj);
+ art::ObjPtr<art::mirror::Object> parent_group = parent_field->GetObject(obj.Get());
info_ptr->parent = parent_group == nullptr
? nullptr
: soa.AddLocalReference<jthreadGroup>(parent_group);
@@ -137,16 +140,16 @@ jvmtiError ThreadGroupUtil::GetThreadGroupInfo(jvmtiEnv* env,
// Max priority.
{
- art::ArtField* prio_field = obj->GetClass()->FindDeclaredInstanceField("maxPriority", "I");
+ art::ArtField* prio_field = tg_class->FindDeclaredInstanceField("maxPriority", "I");
CHECK(prio_field != nullptr);
- info_ptr->max_priority = static_cast<jint>(prio_field->GetInt(obj));
+ info_ptr->max_priority = static_cast<jint>(prio_field->GetInt(obj.Get()));
}
// Daemon.
{
- art::ArtField* daemon_field = obj->GetClass()->FindDeclaredInstanceField("daemon", "Z");
+ art::ArtField* daemon_field = tg_class->FindDeclaredInstanceField("daemon", "Z");
CHECK(daemon_field != nullptr);
- info_ptr->is_daemon = daemon_field->GetBoolean(obj) == 0 ? JNI_FALSE : JNI_TRUE;
+ info_ptr->is_daemon = daemon_field->GetBoolean(obj.Get()) == 0 ? JNI_FALSE : JNI_TRUE;
}
return ERR(NONE);
@@ -204,8 +207,7 @@ static void GetChildThreadGroups(art::Handle<art::mirror::Object> thread_group,
groups_array->AsObjectArray<art::mirror::Object>();
// Copy all non-null elements.
- for (int32_t i = 0; i < groups_array_as_array->GetLength(); ++i) {
- art::ObjPtr<art::mirror::Object> entry = groups_array_as_array->Get(i);
+ for (auto entry : groups_array_as_array->Iterate()) {
if (entry != nullptr) {
thread_groups->push_back(entry);
}