diff options
-rw-r--r-- | compiler/driver/compiler_driver_test.cc | 5 | ||||
-rw-r--r-- | runtime/jni_internal.cc | 3 | ||||
-rw-r--r-- | runtime/thread.h | 2 |
3 files changed, 7 insertions, 3 deletions
diff --git a/compiler/driver/compiler_driver_test.cc b/compiler/driver/compiler_driver_test.cc index 964dfeb..ca956aa 100644 --- a/compiler/driver/compiler_driver_test.cc +++ b/compiler/driver/compiler_driver_test.cc @@ -173,7 +173,10 @@ TEST_F(CompilerDriverTest, AbstractMethodErrorStub) { env_->ExceptionClear(); jclass jlame = env_->FindClass("java/lang/AbstractMethodError"); EXPECT_TRUE(env_->IsInstanceOf(exception, jlame)); - Thread::Current()->ClearException(); + { + ScopedObjectAccess soa(Thread::Current()); + Thread::Current()->ClearException(); + } } // TODO: need check-cast test (when stub complete & we can throw/catch diff --git a/runtime/jni_internal.cc b/runtime/jni_internal.cc index f1284db..9ca3c85 100644 --- a/runtime/jni_internal.cc +++ b/runtime/jni_internal.cc @@ -669,7 +669,8 @@ class JNI { } static void ExceptionClear(JNIEnv* env) { - static_cast<JNIEnvExt*>(env)->self->ClearException(); + ScopedObjectAccess soa(env); + soa.Self()->ClearException(); } static void ExceptionDescribe(JNIEnv* env) { diff --git a/runtime/thread.h b/runtime/thread.h index 88b4b0d..6569a96 100644 --- a/runtime/thread.h +++ b/runtime/thread.h @@ -326,7 +326,7 @@ class Thread { tlsPtr_.throw_location = throw_location; } - void ClearException() { + void ClearException() SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { tlsPtr_.exception = nullptr; tlsPtr_.throw_location.Clear(); } |