Mercurial > hg > truffle
comparison src/share/vm/runtime/thread.cpp @ 1144:9b9c1ee9b3f6
Merge
author | iveresov |
---|---|
date | Wed, 06 Jan 2010 22:21:39 -0800 |
parents | 547f81740344 4ce7240d622c |
children | 7b0e9cba0307 |
comparison
equal
deleted
inserted
replaced
1129:a5a6adfca6ec | 1144:9b9c1ee9b3f6 |
---|---|
971 | 971 |
972 if (HAS_PENDING_EXCEPTION) { | 972 if (HAS_PENDING_EXCEPTION) { |
973 return; | 973 return; |
974 } | 974 } |
975 | 975 |
976 KlassHandle group(this, SystemDictionary::threadGroup_klass()); | 976 KlassHandle group(this, SystemDictionary::ThreadGroup_klass()); |
977 Handle threadObj(this, this->threadObj()); | 977 Handle threadObj(this, this->threadObj()); |
978 | 978 |
979 JavaCalls::call_special(&result, | 979 JavaCalls::call_special(&result, |
980 thread_group, | 980 thread_group, |
981 group, | 981 group, |
1466 // Check if the method Thread.dispatchUncaughtException() exists. If so | 1466 // Check if the method Thread.dispatchUncaughtException() exists. If so |
1467 // call it. Otherwise we have an older library without the JSR-166 changes, | 1467 // call it. Otherwise we have an older library without the JSR-166 changes, |
1468 // so call ThreadGroup.uncaughtException() | 1468 // so call ThreadGroup.uncaughtException() |
1469 KlassHandle recvrKlass(THREAD, threadObj->klass()); | 1469 KlassHandle recvrKlass(THREAD, threadObj->klass()); |
1470 CallInfo callinfo; | 1470 CallInfo callinfo; |
1471 KlassHandle thread_klass(THREAD, SystemDictionary::thread_klass()); | 1471 KlassHandle thread_klass(THREAD, SystemDictionary::Thread_klass()); |
1472 LinkResolver::resolve_virtual_call(callinfo, threadObj, recvrKlass, thread_klass, | 1472 LinkResolver::resolve_virtual_call(callinfo, threadObj, recvrKlass, thread_klass, |
1473 vmSymbolHandles::dispatchUncaughtException_name(), | 1473 vmSymbolHandles::dispatchUncaughtException_name(), |
1474 vmSymbolHandles::throwable_void_signature(), | 1474 vmSymbolHandles::throwable_void_signature(), |
1475 KlassHandle(), false, false, THREAD); | 1475 KlassHandle(), false, false, THREAD); |
1476 CLEAR_PENDING_EXCEPTION; | 1476 CLEAR_PENDING_EXCEPTION; |
1482 vmSymbolHandles::dispatchUncaughtException_name(), | 1482 vmSymbolHandles::dispatchUncaughtException_name(), |
1483 vmSymbolHandles::throwable_void_signature(), | 1483 vmSymbolHandles::throwable_void_signature(), |
1484 uncaught_exception, | 1484 uncaught_exception, |
1485 THREAD); | 1485 THREAD); |
1486 } else { | 1486 } else { |
1487 KlassHandle thread_group(THREAD, SystemDictionary::threadGroup_klass()); | 1487 KlassHandle thread_group(THREAD, SystemDictionary::ThreadGroup_klass()); |
1488 JavaValue result(T_VOID); | 1488 JavaValue result(T_VOID); |
1489 JavaCalls::call_virtual(&result, | 1489 JavaCalls::call_virtual(&result, |
1490 group, thread_group, | 1490 group, thread_group, |
1491 vmSymbolHandles::uncaughtException_name(), | 1491 vmSymbolHandles::uncaughtException_name(), |
1492 vmSymbolHandles::thread_throwable_void_signature(), | 1492 vmSymbolHandles::thread_throwable_void_signature(), |
1503 // is deprecated anyhow. | 1503 // is deprecated anyhow. |
1504 { int count = 3; | 1504 { int count = 3; |
1505 while (java_lang_Thread::threadGroup(threadObj()) != NULL && (count-- > 0)) { | 1505 while (java_lang_Thread::threadGroup(threadObj()) != NULL && (count-- > 0)) { |
1506 EXCEPTION_MARK; | 1506 EXCEPTION_MARK; |
1507 JavaValue result(T_VOID); | 1507 JavaValue result(T_VOID); |
1508 KlassHandle thread_klass(THREAD, SystemDictionary::thread_klass()); | 1508 KlassHandle thread_klass(THREAD, SystemDictionary::Thread_klass()); |
1509 JavaCalls::call_virtual(&result, | 1509 JavaCalls::call_virtual(&result, |
1510 threadObj, thread_klass, | 1510 threadObj, thread_klass, |
1511 vmSymbolHandles::exit_method_name(), | 1511 vmSymbolHandles::exit_method_name(), |
1512 vmSymbolHandles::void_method_signature(), | 1512 vmSymbolHandles::void_method_signature(), |
1513 THREAD); | 1513 THREAD); |
1741 } | 1741 } |
1742 | 1742 |
1743 // Check for pending async. exception | 1743 // Check for pending async. exception |
1744 if (_pending_async_exception != NULL) { | 1744 if (_pending_async_exception != NULL) { |
1745 // Only overwrite an already pending exception, if it is not a threadDeath. | 1745 // Only overwrite an already pending exception, if it is not a threadDeath. |
1746 if (!has_pending_exception() || !pending_exception()->is_a(SystemDictionary::threaddeath_klass())) { | 1746 if (!has_pending_exception() || !pending_exception()->is_a(SystemDictionary::ThreadDeath_klass())) { |
1747 | 1747 |
1748 // We cannot call Exceptions::_throw(...) here because we cannot block | 1748 // We cannot call Exceptions::_throw(...) here because we cannot block |
1749 set_pending_exception(_pending_async_exception, __FILE__, __LINE__); | 1749 set_pending_exception(_pending_async_exception, __FILE__, __LINE__); |
1750 | 1750 |
1751 if (TraceExceptions) { | 1751 if (TraceExceptions) { |
1850 // Do not throw asynchronous exceptions against the compiler thread | 1850 // Do not throw asynchronous exceptions against the compiler thread |
1851 // (the compiler thread should not be a Java thread -- fix in 1.4.2) | 1851 // (the compiler thread should not be a Java thread -- fix in 1.4.2) |
1852 if (is_Compiler_thread()) return; | 1852 if (is_Compiler_thread()) return; |
1853 | 1853 |
1854 // This is a change from JDK 1.1, but JDK 1.2 will also do it: | 1854 // This is a change from JDK 1.1, but JDK 1.2 will also do it: |
1855 if (java_throwable->is_a(SystemDictionary::threaddeath_klass())) { | 1855 if (java_throwable->is_a(SystemDictionary::ThreadDeath_klass())) { |
1856 java_lang_Thread::set_stillborn(threadObj()); | 1856 java_lang_Thread::set_stillborn(threadObj()); |
1857 } | 1857 } |
1858 | 1858 |
1859 { | 1859 { |
1860 // Actually throw the Throwable against the target Thread - however | 1860 // Actually throw the Throwable against the target Thread - however |
1861 // only if there is no thread death exception installed already. | 1861 // only if there is no thread death exception installed already. |
1862 if (_pending_async_exception == NULL || !_pending_async_exception->is_a(SystemDictionary::threaddeath_klass())) { | 1862 if (_pending_async_exception == NULL || !_pending_async_exception->is_a(SystemDictionary::ThreadDeath_klass())) { |
1863 // If the topmost frame is a runtime stub, then we are calling into | 1863 // If the topmost frame is a runtime stub, then we are calling into |
1864 // OptoRuntime from compiled code. Some runtime stubs (new, monitor_exit..) | 1864 // OptoRuntime from compiled code. Some runtime stubs (new, monitor_exit..) |
1865 // must deoptimize the caller before continuing, as the compiled exception handler table | 1865 // must deoptimize the caller before continuing, as the compiled exception handler table |
1866 // may not be valid | 1866 // may not be valid |
1867 if (has_last_Java_frame()) { | 1867 if (has_last_Java_frame()) { |
3092 warning("java.lang.NullPointerException has not been initialized"); | 3092 warning("java.lang.NullPointerException has not been initialized"); |
3093 warning("java.lang.ClassCastException has not been initialized"); | 3093 warning("java.lang.ClassCastException has not been initialized"); |
3094 warning("java.lang.ArrayStoreException has not been initialized"); | 3094 warning("java.lang.ArrayStoreException has not been initialized"); |
3095 warning("java.lang.ArithmeticException has not been initialized"); | 3095 warning("java.lang.ArithmeticException has not been initialized"); |
3096 warning("java.lang.StackOverflowError has not been initialized"); | 3096 warning("java.lang.StackOverflowError has not been initialized"); |
3097 } | |
3098 | |
3099 if (EnableInvokeDynamic) { | |
3100 // JSR 292: An intialized java.dyn.InvokeDynamic is required in | |
3101 // the compiler. | |
3102 initialize_class(vmSymbolHandles::java_dyn_InvokeDynamic(), CHECK_0); | |
3097 } | 3103 } |
3098 } | 3104 } |
3099 | 3105 |
3100 // See : bugid 4211085. | 3106 // See : bugid 4211085. |
3101 // Background : the static initializer of java.lang.Compiler tries to read | 3107 // Background : the static initializer of java.lang.Compiler tries to read |