< prev index next >
hotspot/src/os/aix/vm/os_aix.cpp
Print this page
*** 845,855 ****
}
return 0;
}
! bool os::create_thread(Thread* thread, ThreadType thr_type, size_t stack_size) {
assert(thread->osthread() == NULL, "caller responsible");
// Allocate the OSThread object
OSThread* osthread = new OSThread(NULL, NULL);
--- 845,856 ----
}
return 0;
}
! bool os::create_thread(Thread* thread, ThreadType thr_type,
! size_t req_stack_size) {
assert(thread->osthread() == NULL, "caller responsible");
// Allocate the OSThread object
OSThread* osthread = new OSThread(NULL, NULL);
*** 878,918 ****
// Start in suspended state, and in os::thread_start, wake the thread up.
guarantee(pthread_attr_setsuspendstate_np(&attr, PTHREAD_CREATE_SUSPENDED_NP) == 0, "???");
// calculate stack size if it's not specified by caller
! if (stack_size == 0) {
! stack_size = os::Aix::default_stack_size(thr_type);
!
! switch (thr_type) {
! case os::java_thread:
! // Java threads use ThreadStackSize whose default value can be changed with the flag -Xss.
! assert(JavaThread::stack_size_at_create() > 0, "this should be set");
! stack_size = JavaThread::stack_size_at_create();
! break;
! case os::compiler_thread:
! if (CompilerThreadStackSize > 0) {
! stack_size = (size_t)(CompilerThreadStackSize * K);
! break;
! } // else fall through:
! // use VMThreadStackSize if CompilerThreadStackSize is not defined
! case os::vm_thread:
! case os::pgc_thread:
! case os::cgc_thread:
! case os::watcher_thread:
! if (VMThreadStackSize > 0) stack_size = (size_t)(VMThreadStackSize * K);
! break;
! }
! }
!
! stack_size = MAX2(stack_size, os::Aix::min_stack_allowed);
pthread_attr_setstacksize(&attr, stack_size);
pthread_t tid;
int ret = pthread_create(&tid, &attr, (void* (*)(void*)) thread_native_entry, thread);
-
char buf[64];
if (ret == 0) {
log_info(os, thread)("Thread started (pthread id: " UINTX_FORMAT ", attributes: %s). ",
(uintx) tid, os::Posix::describe_pthread_attr(buf, sizeof(buf), &attr));
} else {
--- 879,894 ----
// Start in suspended state, and in os::thread_start, wake the thread up.
guarantee(pthread_attr_setsuspendstate_np(&attr, PTHREAD_CREATE_SUSPENDED_NP) == 0, "???");
// calculate stack size if it's not specified by caller
! size_t stack_size = os::Posix::get_initial_stack_size(thr_type, req_stack_size);
pthread_attr_setstacksize(&attr, stack_size);
pthread_t tid;
int ret = pthread_create(&tid, &attr, (void* (*)(void*)) thread_native_entry, thread);
char buf[64];
if (ret == 0) {
log_info(os, thread)("Thread started (pthread id: " UINTX_FORMAT ", attributes: %s). ",
(uintx) tid, os::Posix::describe_pthread_attr(buf, sizeof(buf), &attr));
} else {
*** 3591,3626 ****
}
Aix::signal_sets_init();
Aix::install_signal_handlers();
! // Check minimum allowable stack size for thread creation and to initialize
! // the java system classes, including StackOverflowError - depends on page
! // size. Add two 4K pages for compiler2 recursion in main thread.
! // Add in 4*BytesPerWord 4K pages to account for VM stack during
! // class initialization depending on 32 or 64 bit VM.
! os::Aix::min_stack_allowed = MAX2(os::Aix::min_stack_allowed,
! JavaThread::stack_guard_zone_size() +
! JavaThread::stack_shadow_zone_size() +
! (4*BytesPerWord COMPILER2_PRESENT(+2)) * 4 * K);
!
! os::Aix::min_stack_allowed = align_size_up(os::Aix::min_stack_allowed, os::vm_page_size());
!
! size_t threadStackSizeInBytes = ThreadStackSize * K;
! if (threadStackSizeInBytes != 0 &&
! threadStackSizeInBytes < os::Aix::min_stack_allowed) {
! tty->print_cr("\nThe stack size specified is too small, "
! "Specify at least %dk",
! os::Aix::min_stack_allowed / K);
return JNI_ERR;
}
- // Make the stack size a multiple of the page size so that
- // the yellow/red zones can be guarded.
- // Note that this can be 0, if no default stacksize was set.
- JavaThread::set_stack_size_at_create(round_to(threadStackSizeInBytes, vm_page_size()));
-
if (UseNUMA) {
UseNUMA = false;
warning("NUMA optimizations are not available on this OS.");
}
--- 3567,3581 ----
}
Aix::signal_sets_init();
Aix::install_signal_handlers();
! // Check and sets minimum stack sizes against command line options
! if (Posix::set_minimum_stack_sizes() == JNI_ERR) {
return JNI_ERR;
}
if (UseNUMA) {
UseNUMA = false;
warning("NUMA optimizations are not available on this OS.");
}
< prev index next >