aboutsummaryrefslogtreecommitdiff
path: root/libjava/posix-threads.cc
diff options
context:
space:
mode:
authorBryce McKinlay <mckinlay@redhat.com>2005-11-17 20:25:57 +0000
committerBryce McKinlay <bryce@gcc.gnu.org>2005-11-17 20:25:57 +0000
commit11922361e4a39efa05cc2a807d656dc5bfb858b3 (patch)
tree5e88137f0a78a8faff6c52f9de564f61a19bcecd /libjava/posix-threads.cc
parentf9314d012c1b213b95ee71a99b9edbe9be0e9118 (diff)
downloadgcc-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.cc21
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, &param);
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;