diff options
author | Bryce McKinlay <mckinlay@redhat.com> | 2005-11-17 20:25:57 +0000 |
---|---|---|
committer | Bryce McKinlay <bryce@gcc.gnu.org> | 2005-11-17 20:25:57 +0000 |
commit | 11922361e4a39efa05cc2a807d656dc5bfb858b3 (patch) | |
tree | 5e88137f0a78a8faff6c52f9de564f61a19bcecd /libjava/posix-threads.cc | |
parent | f9314d012c1b213b95ee71a99b9edbe9be0e9118 (diff) | |
download | gcc-11922361e4a39efa05cc2a807d656dc5bfb858b3.zip gcc-11922361e4a39efa05cc2a807d656dc5bfb858b3.tar.gz gcc-11922361e4a39efa05cc2a807d656dc5bfb858b3.tar.bz2 |
Implement -Xss.
* include/jvm.h (gcj::stack_size): Declare.
(_Jv_StackSize): Declare.
* posix-threads.cc (_Jv_InitThreads): Validate gcj::stack_size.
(_Jv_ThreadStart): Set stack size if specified.
* prims.cc (gcj::stack_size): Define.
(parse_memory_size): Renamed from parse_heap_size.
(_Jv_SetStackSize): Parse stack size argument and set
gcj::stack_size.
From-SVN: r107132
Diffstat (limited to 'libjava/posix-threads.cc')
-rw-r--r-- | libjava/posix-threads.cc | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/libjava/posix-threads.cc b/libjava/posix-threads.cc index f77e2f4..a596c77 100644 --- a/libjava/posix-threads.cc +++ b/libjava/posix-threads.cc @@ -311,6 +311,19 @@ _Jv_InitThreads (void) // Block SIGCHLD here to ensure that any non-Java threads inherit the new // signal mask. block_sigchld(); + + // Check/set the thread stack size. + size_t min_ss = 32 * 1024; + + if (sizeof (void *) == 8) + // Bigger default on 64-bit systems. + min_ss *= 2; + + if (min_ss < PTHREAD_STACK_MIN) + min_ss = PTHREAD_STACK_MIN; + + if (gcj::stack_size > 0 && gcj::stack_size < min_ss) + gcj::stack_size = min_ss; } _Jv_Thread_t * @@ -430,6 +443,14 @@ _Jv_ThreadStart (java::lang::Thread *thread, _Jv_Thread_t *data, pthread_attr_init (&attr); pthread_attr_setschedparam (&attr, ¶m); pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED); + + // Set stack size if -Xss option was given. + if (gcj::stack_size > 0) + { + int e = pthread_attr_setstacksize (&attr, gcj::stack_size); + if (e != 0) + JvFail (strerror (e)); + } info = (struct starter *) _Jv_AllocBytes (sizeof (struct starter)); info->method = meth; |