diff options
Diffstat (limited to 'openjdkjvmti/ti_threadgroup.cc')
| -rw-r--r-- | openjdkjvmti/ti_threadgroup.cc | 20 |
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); } |