--- a/hotspot/src/os/windows/vm/os_windows.cpp Mon Oct 04 10:08:29 2010 -0700
+++ b/hotspot/src/os/windows/vm/os_windows.cpp Thu Oct 07 08:06:06 2010 -0700
@@ -3311,7 +3311,6 @@
}
}
-
// this is called _after_ the global arguments have been parsed
jint os::init_2(void) {
// Allocate a single page and mark it as readable for safepoint polling
@@ -3390,6 +3389,21 @@
actual_reserve_size = default_reserve_size;
}
+ // Check minimum allowable stack size for thread creation and to initialize
+ // the java system classes, including StackOverflowError - depends on page
+ // size. Add a page for compiler2 recursion in main thread.
+ // Add in 2*BytesPerWord times page size to account for VM stack during
+ // class initialization depending on 32 or 64 bit VM.
+ size_t min_stack_allowed =
+ (size_t)(StackYellowPages+StackRedPages+StackShadowPages+
+ 2*BytesPerWord COMPILER2_PRESENT(+1)) * os::vm_page_size();
+ if (actual_reserve_size < min_stack_allowed) {
+ tty->print_cr("\nThe stack size specified is too small, "
+ "Specify at least %dk",
+ min_stack_allowed / K);
+ return JNI_ERR;
+ }
+
JavaThread::set_stack_size_at_create(stack_commit_size);
// Calculate theoretical max. size of Threads to guard gainst artifical