diff options
Diffstat (limited to 'runtime/thread.cc')
-rw-r--r-- | runtime/thread.cc | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/runtime/thread.cc b/runtime/thread.cc index d1b0464906..af11f73d89 100644 --- a/runtime/thread.cc +++ b/runtime/thread.cc @@ -377,7 +377,11 @@ bool Thread::Init(ThreadList* thread_list, JavaVMExt* java_vm) { tls32_.thin_lock_thread_id = thread_list->AllocThreadId(this); - tlsPtr_.jni_env = new JNIEnvExt(this, java_vm); + tlsPtr_.jni_env = JNIEnvExt::Create(this, java_vm); + if (tlsPtr_.jni_env == nullptr) { + return false; + } + thread_list->Register(this); return true; } @@ -2304,8 +2308,8 @@ void Thread::VisitRoots(RootVisitor* visitor) { mapper.VisitShadowFrame(shadow_frame); } } - if (tlsPtr_.method_verifier != nullptr) { - tlsPtr_.method_verifier->VisitRoots(visitor, RootInfo(kRootNativeStack, thread_id)); + for (auto* verifier = tlsPtr_.method_verifier; verifier != nullptr; verifier = verifier->link_) { + verifier->VisitRoots(visitor, RootInfo(kRootNativeStack, thread_id)); } // Visit roots on this thread's stack Context* context = GetLongJumpContext(); @@ -2429,14 +2433,14 @@ void Thread::ClearDebugInvokeReq() { tlsPtr_.debug_invoke_req = nullptr; } -void Thread::SetVerifier(verifier::MethodVerifier* verifier) { - CHECK(tlsPtr_.method_verifier == nullptr); +void Thread::PushVerifier(verifier::MethodVerifier* verifier) { + verifier->link_ = tlsPtr_.method_verifier; tlsPtr_.method_verifier = verifier; } -void Thread::ClearVerifier(verifier::MethodVerifier* verifier) { +void Thread::PopVerifier(verifier::MethodVerifier* verifier) { CHECK_EQ(tlsPtr_.method_verifier, verifier); - tlsPtr_.method_verifier = nullptr; + tlsPtr_.method_verifier = verifier->link_; } } // namespace art |