diff options
author | Ian Rogers <irogers@google.com> | 2012-09-28 17:17:10 -0700 |
---|---|---|
committer | Ian Rogers <irogers@google.com> | 2012-10-03 17:29:26 -0700 |
commit | 120f1c74a9768e958377b6c97897511b27ae58c8 (patch) | |
tree | fa1f90d88ea34d8ef9eec729d27c7a70956a6a09 /src/well_known_classes.cc | |
parent | cabc60e71a65fa17e5a99fba94fc61523fbeb478 (diff) | |
download | art-120f1c74a9768e958377b6c97897511b27ae58c8.zip art-120f1c74a9768e958377b6c97897511b27ae58c8.tar.gz art-120f1c74a9768e958377b6c97897511b27ae58c8.tar.bz2 |
Fail threads attaching during runtime shutdown.
Introduce counters to indicate that threads are being born. Don't allow
thread birth to occur during runtime shutdown.
Bug: 7000936
Change-Id: Ib0d78f78c0ff126a4b5d3b5a6f1a2ff8f5061ae9
Diffstat (limited to 'src/well_known_classes.cc')
-rw-r--r-- | src/well_known_classes.cc | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/well_known_classes.cc b/src/well_known_classes.cc index 1413f0b..03b9cb2 100644 --- a/src/well_known_classes.cc +++ b/src/well_known_classes.cc @@ -34,6 +34,7 @@ jclass WellKnownClasses::java_lang_reflect_InvocationHandler; jclass WellKnownClasses::java_lang_reflect_AbstractMethod; jclass WellKnownClasses::java_lang_reflect_Proxy; jclass WellKnownClasses::java_lang_RuntimeException; +jclass WellKnownClasses::java_lang_StackOverflowError; jclass WellKnownClasses::java_lang_Thread; jclass WellKnownClasses::java_lang_Thread$UncaughtExceptionHandler; jclass WellKnownClasses::java_lang_ThreadGroup; @@ -56,6 +57,7 @@ jmethodID WellKnownClasses::java_lang_Double_valueOf; jmethodID WellKnownClasses::java_lang_Float_valueOf; jmethodID WellKnownClasses::java_lang_Integer_valueOf; jmethodID WellKnownClasses::java_lang_Long_valueOf; +jmethodID WellKnownClasses::java_lang_Object_notify; jmethodID WellKnownClasses::java_lang_ref_FinalizerReference_add; jmethodID WellKnownClasses::java_lang_ref_ReferenceQueue_add; jmethodID WellKnownClasses::java_lang_reflect_InvocationHandler_invoke; @@ -128,6 +130,7 @@ void WellKnownClasses::InitClasses(JNIEnv* env) { java_lang_reflect_AbstractMethod = CacheClass(env, "java/lang/reflect/AbstractMethod"); java_lang_reflect_Proxy = CacheClass(env, "java/lang/reflect/Proxy"); java_lang_RuntimeException = CacheClass(env, "java/lang/RuntimeException"); + java_lang_StackOverflowError = CacheClass(env, "java/lang/StackOverflowError"); java_lang_Thread = CacheClass(env, "java/lang/Thread"); java_lang_Thread$UncaughtExceptionHandler = CacheClass(env, "java/lang/Thread$UncaughtExceptionHandler"); java_lang_ThreadGroup = CacheClass(env, "java/lang/ThreadGroup"); @@ -149,6 +152,9 @@ void WellKnownClasses::Init(JNIEnv* env) { java_lang_Daemons_requestHeapTrim = CacheMethod(env, java_lang_Daemons, true, "requestHeapTrim", "()V"); java_lang_Daemons_start = CacheMethod(env, java_lang_Daemons, true, "start", "()V"); + ScopedLocalRef<jclass> java_lang_Object(env, env->FindClass("java/lang/Object")); + java_lang_Object_notify = CacheMethod(env, java_lang_Object.get(), false, "notify", "()V"); + ScopedLocalRef<jclass> java_lang_ref_FinalizerReference(env, env->FindClass("java/lang/ref/FinalizerReference")); java_lang_ref_FinalizerReference_add = CacheMethod(env, java_lang_ref_FinalizerReference.get(), true, "add", "(Ljava/lang/Object;)V"); ScopedLocalRef<jclass> java_lang_ref_ReferenceQueue(env, env->FindClass("java/lang/ref/ReferenceQueue")); |