comparison src/share/vm/utilities/exceptions.cpp @ 1867:b6aedd1acdc0

6983240: guarantee((Solaris::min_stack_allowed >= (StackYellowPages+StackRedPages...) wrong Summary: min_stack_allowed is a compile time constant and Stack*Pages are settable Reviewed-by: dholmes, kvn
author coleenp
date Thu, 07 Oct 2010 08:06:06 -0700
parents 66c5dadb4d61
children 2d26b0046e0d f95d63e2154a
comparison
equal deleted inserted replaced
1866:644f98c78e33 1867:b6aedd1acdc0
59 if (!Universe::is_fully_initialized()) { 59 if (!Universe::is_fully_initialized()) {
60 vm_exit_during_initialization(h_exception); 60 vm_exit_during_initialization(h_exception);
61 ShouldNotReachHere(); 61 ShouldNotReachHere();
62 } 62 }
63 63
64 #ifdef ASSERT
65 // Check for trying to throw stack overflow before initialization is complete
66 // to prevent infinite recursion trying to initialize stack overflow without
67 // adequate stack space.
68 // This can happen with stress testing a large value of StackShadowPages
69 if (h_exception()->klass() == SystemDictionary::StackOverflowError_klass()) {
70 instanceKlass* ik = instanceKlass::cast(h_exception->klass());
71 assert(ik->is_initialized(),
72 "need to increase min_stack_allowed calculation");
73 }
74 #endif // ASSERT
75
64 if (thread->is_VM_thread() 76 if (thread->is_VM_thread()
65 || thread->is_Compiler_thread() ) { 77 || thread->is_Compiler_thread() ) {
66 // We do not care what kind of exception we get for the vm-thread or a thread which 78 // We do not care what kind of exception we get for the vm-thread or a thread which
67 // is compiling. We just install a dummy exception object 79 // is compiling. We just install a dummy exception object
68 thread->set_pending_exception(Universe::vm_exception(), file, line); 80 thread->set_pending_exception(Universe::vm_exception(), file, line);
89 // We do not care what kind of exception we get for the vm-thread or a thread which 101 // We do not care what kind of exception we get for the vm-thread or a thread which
90 // is compiling. We just install a dummy exception object 102 // is compiling. We just install a dummy exception object
91 thread->set_pending_exception(Universe::vm_exception(), file, line); 103 thread->set_pending_exception(Universe::vm_exception(), file, line);
92 return true; 104 return true;
93 } 105 }
94
95 return false; 106 return false;
96 } 107 }
97 108
98 // This method should only be called from generated code, 109 // This method should only be called from generated code,
99 // therefore the exception oop should be in the oopmap. 110 // therefore the exception oop should be in the oopmap.
191 Handle exception; 202 Handle exception;
192 if (!THREAD->has_pending_exception()) { 203 if (!THREAD->has_pending_exception()) {
193 klassOop k = SystemDictionary::StackOverflowError_klass(); 204 klassOop k = SystemDictionary::StackOverflowError_klass();
194 oop e = instanceKlass::cast(k)->allocate_instance(CHECK); 205 oop e = instanceKlass::cast(k)->allocate_instance(CHECK);
195 exception = Handle(THREAD, e); // fill_in_stack trace does gc 206 exception = Handle(THREAD, e); // fill_in_stack trace does gc
207 assert(instanceKlass::cast(k)->is_initialized(), "need to increase min_stack_allowed calculation");
196 if (StackTraceInThrowable) { 208 if (StackTraceInThrowable) {
197 java_lang_Throwable::fill_in_stack_trace(exception); 209 java_lang_Throwable::fill_in_stack_trace(exception);
198 } 210 }
199 } else { 211 } else {
200 // if prior exception, throw that one instead 212 // if prior exception, throw that one instead