comparison src/share/vm/runtime/thread.cpp @ 1142:4ce7240d622c

6914300: ciEnv should export all well known classes Reviewed-by: kvn, twisti
author never
date Wed, 06 Jan 2010 14:22:39 -0800
parents e66fd840cb6b
children 9b9c1ee9b3f6
comparison
equal deleted inserted replaced
1140:1f6d42899c3a 1142:4ce7240d622c
955 955
956 if (HAS_PENDING_EXCEPTION) { 956 if (HAS_PENDING_EXCEPTION) {
957 return; 957 return;
958 } 958 }
959 959
960 KlassHandle group(this, SystemDictionary::threadGroup_klass()); 960 KlassHandle group(this, SystemDictionary::ThreadGroup_klass());
961 Handle threadObj(this, this->threadObj()); 961 Handle threadObj(this, this->threadObj());
962 962
963 JavaCalls::call_special(&result, 963 JavaCalls::call_special(&result,
964 thread_group, 964 thread_group,
965 group, 965 group,
1449 // Check if the method Thread.dispatchUncaughtException() exists. If so 1449 // Check if the method Thread.dispatchUncaughtException() exists. If so
1450 // call it. Otherwise we have an older library without the JSR-166 changes, 1450 // call it. Otherwise we have an older library without the JSR-166 changes,
1451 // so call ThreadGroup.uncaughtException() 1451 // so call ThreadGroup.uncaughtException()
1452 KlassHandle recvrKlass(THREAD, threadObj->klass()); 1452 KlassHandle recvrKlass(THREAD, threadObj->klass());
1453 CallInfo callinfo; 1453 CallInfo callinfo;
1454 KlassHandle thread_klass(THREAD, SystemDictionary::thread_klass()); 1454 KlassHandle thread_klass(THREAD, SystemDictionary::Thread_klass());
1455 LinkResolver::resolve_virtual_call(callinfo, threadObj, recvrKlass, thread_klass, 1455 LinkResolver::resolve_virtual_call(callinfo, threadObj, recvrKlass, thread_klass,
1456 vmSymbolHandles::dispatchUncaughtException_name(), 1456 vmSymbolHandles::dispatchUncaughtException_name(),
1457 vmSymbolHandles::throwable_void_signature(), 1457 vmSymbolHandles::throwable_void_signature(),
1458 KlassHandle(), false, false, THREAD); 1458 KlassHandle(), false, false, THREAD);
1459 CLEAR_PENDING_EXCEPTION; 1459 CLEAR_PENDING_EXCEPTION;
1465 vmSymbolHandles::dispatchUncaughtException_name(), 1465 vmSymbolHandles::dispatchUncaughtException_name(),
1466 vmSymbolHandles::throwable_void_signature(), 1466 vmSymbolHandles::throwable_void_signature(),
1467 uncaught_exception, 1467 uncaught_exception,
1468 THREAD); 1468 THREAD);
1469 } else { 1469 } else {
1470 KlassHandle thread_group(THREAD, SystemDictionary::threadGroup_klass()); 1470 KlassHandle thread_group(THREAD, SystemDictionary::ThreadGroup_klass());
1471 JavaValue result(T_VOID); 1471 JavaValue result(T_VOID);
1472 JavaCalls::call_virtual(&result, 1472 JavaCalls::call_virtual(&result,
1473 group, thread_group, 1473 group, thread_group,
1474 vmSymbolHandles::uncaughtException_name(), 1474 vmSymbolHandles::uncaughtException_name(),
1475 vmSymbolHandles::thread_throwable_void_signature(), 1475 vmSymbolHandles::thread_throwable_void_signature(),
1486 // is deprecated anyhow. 1486 // is deprecated anyhow.
1487 { int count = 3; 1487 { int count = 3;
1488 while (java_lang_Thread::threadGroup(threadObj()) != NULL && (count-- > 0)) { 1488 while (java_lang_Thread::threadGroup(threadObj()) != NULL && (count-- > 0)) {
1489 EXCEPTION_MARK; 1489 EXCEPTION_MARK;
1490 JavaValue result(T_VOID); 1490 JavaValue result(T_VOID);
1491 KlassHandle thread_klass(THREAD, SystemDictionary::thread_klass()); 1491 KlassHandle thread_klass(THREAD, SystemDictionary::Thread_klass());
1492 JavaCalls::call_virtual(&result, 1492 JavaCalls::call_virtual(&result,
1493 threadObj, thread_klass, 1493 threadObj, thread_klass,
1494 vmSymbolHandles::exit_method_name(), 1494 vmSymbolHandles::exit_method_name(),
1495 vmSymbolHandles::void_method_signature(), 1495 vmSymbolHandles::void_method_signature(),
1496 THREAD); 1496 THREAD);
1724 } 1724 }
1725 1725
1726 // Check for pending async. exception 1726 // Check for pending async. exception
1727 if (_pending_async_exception != NULL) { 1727 if (_pending_async_exception != NULL) {
1728 // Only overwrite an already pending exception, if it is not a threadDeath. 1728 // Only overwrite an already pending exception, if it is not a threadDeath.
1729 if (!has_pending_exception() || !pending_exception()->is_a(SystemDictionary::threaddeath_klass())) { 1729 if (!has_pending_exception() || !pending_exception()->is_a(SystemDictionary::ThreadDeath_klass())) {
1730 1730
1731 // We cannot call Exceptions::_throw(...) here because we cannot block 1731 // We cannot call Exceptions::_throw(...) here because we cannot block
1732 set_pending_exception(_pending_async_exception, __FILE__, __LINE__); 1732 set_pending_exception(_pending_async_exception, __FILE__, __LINE__);
1733 1733
1734 if (TraceExceptions) { 1734 if (TraceExceptions) {
1833 // Do not throw asynchronous exceptions against the compiler thread 1833 // Do not throw asynchronous exceptions against the compiler thread
1834 // (the compiler thread should not be a Java thread -- fix in 1.4.2) 1834 // (the compiler thread should not be a Java thread -- fix in 1.4.2)
1835 if (is_Compiler_thread()) return; 1835 if (is_Compiler_thread()) return;
1836 1836
1837 // This is a change from JDK 1.1, but JDK 1.2 will also do it: 1837 // This is a change from JDK 1.1, but JDK 1.2 will also do it:
1838 if (java_throwable->is_a(SystemDictionary::threaddeath_klass())) { 1838 if (java_throwable->is_a(SystemDictionary::ThreadDeath_klass())) {
1839 java_lang_Thread::set_stillborn(threadObj()); 1839 java_lang_Thread::set_stillborn(threadObj());
1840 } 1840 }
1841 1841
1842 { 1842 {
1843 // Actually throw the Throwable against the target Thread - however 1843 // Actually throw the Throwable against the target Thread - however
1844 // only if there is no thread death exception installed already. 1844 // only if there is no thread death exception installed already.
1845 if (_pending_async_exception == NULL || !_pending_async_exception->is_a(SystemDictionary::threaddeath_klass())) { 1845 if (_pending_async_exception == NULL || !_pending_async_exception->is_a(SystemDictionary::ThreadDeath_klass())) {
1846 // If the topmost frame is a runtime stub, then we are calling into 1846 // If the topmost frame is a runtime stub, then we are calling into
1847 // OptoRuntime from compiled code. Some runtime stubs (new, monitor_exit..) 1847 // OptoRuntime from compiled code. Some runtime stubs (new, monitor_exit..)
1848 // must deoptimize the caller before continuing, as the compiled exception handler table 1848 // must deoptimize the caller before continuing, as the compiled exception handler table
1849 // may not be valid 1849 // may not be valid
1850 if (has_last_Java_frame()) { 1850 if (has_last_Java_frame()) {