summaryrefslogtreecommitdiffstats
path: root/src/well_known_classes.cc
diff options
context:
space:
mode:
authorIan Rogers <irogers@google.com>2012-09-28 17:17:10 -0700
committerIan Rogers <irogers@google.com>2012-10-03 17:29:26 -0700
commit120f1c74a9768e958377b6c97897511b27ae58c8 (patch)
treefa1f90d88ea34d8ef9eec729d27c7a70956a6a09 /src/well_known_classes.cc
parentcabc60e71a65fa17e5a99fba94fc61523fbeb478 (diff)
downloadart-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.cc6
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"));