about summary refs log tree commit diff
path: root/nptl/init.c
diff options
context:
space:
mode:
authorRoland McGrath <roland@gnu.org>2005-10-16 11:38:59 +0000
committerRoland McGrath <roland@gnu.org>2005-10-16 11:38:59 +0000
commitfe60d146c76a500ac68496c2c2b3223337d3d7c6 (patch)
tree8d2bfda59a4314a797e2db985bce7b5832f20b60 /nptl/init.c
parentc45c24812b64c41a494e74c789a9e91ea21b3f7c (diff)
downloadglibc-fe60d146c76a500ac68496c2c2b3223337d3d7c6.tar.gz
glibc-fe60d146c76a500ac68496c2c2b3223337d3d7c6.tar.xz
glibc-fe60d146c76a500ac68496c2c2b3223337d3d7c6.zip
* sysdeps/unix/sysv/linux/sh/bits/mman.h: Define MREMAP_FIXED.
Diffstat (limited to 'nptl/init.c')
-rw-r--r--nptl/init.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/nptl/init.c b/nptl/init.c
index de704122d1..6a7fff9959 100644
--- a/nptl/init.c
+++ b/nptl/init.c
@@ -297,17 +297,22 @@ __pthread_initialize_minimal_internal (void)
       || limit.rlim_cur == RLIM_INFINITY)
     /* The system limit is not usable.  Use an architecture-specific
        default.  */
-    __default_stacksize = ARCH_STACK_DEFAULT_SIZE;
+    limit.rlim_cur = ARCH_STACK_DEFAULT_SIZE;
   else if (limit.rlim_cur < PTHREAD_STACK_MIN)
     /* The system limit is unusably small.
        Use the minimal size acceptable.  */
-    __default_stacksize = PTHREAD_STACK_MIN;
-  else
-    {
-      /* Round the resource limit up to page size.  */
-      const uintptr_t pagesz = __sysconf (_SC_PAGESIZE);
-      __default_stacksize = (limit.rlim_cur + pagesz - 1) & -pagesz;
-    }
+    limit.rlim_cur = PTHREAD_STACK_MIN;
+
+  /* Make sure it meets the minimum size that allocate_stack
+     (allocatestack.c) will demand, which depends on the page size.  */
+  const uintptr_t pagesz = __sysconf (_SC_PAGESIZE);
+  const size_t minstack = pagesz * 2 + __static_tls_size + MINIMAL_REST_STACK;
+  if (limit.rlim_cur < minstack)
+    limit.rlim_cur = minstack;
+
+  /* Round the resource limit up to page size.  */
+  limit.rlim_cur = (limit.rlim_cur + pagesz - 1) & -pagesz;
+  __default_stacksize = limit.rlim_cur;
 
   /* Get the size of the static and alignment requirements for the TLS
      block.  */