Create internal threads with sufficient stack size

This commit is contained in:
Ulrich Drepper 2011-12-22 22:43:39 -05:00
parent 3b8dfc621b
commit 2c1094bd70
6 changed files with 31 additions and 9 deletions

10
NEWS
View File

@ -10,11 +10,11 @@ Version 2.15
* The following bugs are resolved with this release:
6779, 6783, 9696, 10103, 10709, 11589, 12403, 12847, 12868, 12852, 12874,
12885, 12892, 12907, 12922, 12935, 13007, 13021, 13067, 13068, 13090,
13092, 13096, 13114, 13118, 13123, 13134, 13138, 13147, 13150, 13166,
13179, 13185, 13189, 13192, 13268, 13276, 13282, 13291, 13305, 13328,
13335, 13337, 13344, 13358, 13367, 13413, 13416, 13423, 13439, 13446,
13472, 13484, 13506, 13515, 13523, 13524, 13538, 13540
12885, 12892, 12907, 12922, 12935, 13007, 13021, 13067, 13068, 13088,
13090, 13092, 13096, 13114, 13118, 13123, 13134, 13138, 13147, 13150,
13166, 13179, 13185, 13189, 13192, 13268, 13276, 13282, 13291, 13305,
13328, 13335, 13337, 13344, 13358, 13367, 13413, 13416, 13423, 13439,
13446, 13472, 13484, 13506, 13515, 13523, 13524, 13538, 13540
* New program pldd to list loaded object of a process
Implemented by Ulrich Drepper.

View File

@ -1,3 +1,14 @@
2011-12-22 Ulrich Drepper <drepper@gmail.com>
[BZ #13088]
* sysdeps/unix/sysv/linux/timer_routines.c: Get minimum stack size
through __pthread_get_minstack.
* nptl-init.c (__pthread_initialize_minimal_internal): Get page size
directly from _rtld_global_ro.
(__pthread_get_minstack): New function.
* pthreadP.h: Declare __pthread_get_minstack.
* Versions (libpthread) [GLIBC_PRIVATE]: Add __pthread_get_minstack.
2011-12-21 Ulrich Drepper <drepper@gmail.com>
[BZ #13515]

View File

@ -255,6 +255,6 @@ libpthread {
GLIBC_PRIVATE {
__pthread_initialize_minimal;
__pthread_clock_gettime; __pthread_clock_settime;
__pthread_unwind;
__pthread_unwind; __pthread_get_minstack;
}
}

View File

@ -427,7 +427,7 @@ __pthread_initialize_minimal_internal (void)
/* 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 uintptr_t pagesz = GLRO(dl_pagesize);
const size_t minstack = pagesz + __static_tls_size + MINIMAL_REST_STACK;
if (limit.rlim_cur < minstack)
limit.rlim_cur = minstack;
@ -469,3 +469,13 @@ __pthread_initialize_minimal_internal (void)
}
strong_alias (__pthread_initialize_minimal_internal,
__pthread_initialize_minimal)
size_t
__pthread_get_minstack (const pthread_attr_t *attr)
{
struct pthread_attr *iattr = (struct pthread_attr *) attr;
return (GLRO(dl_pagesize) + __static_tls_size + PTHREAD_STACK_MIN
+ iattr->guardsize);
}

View File

@ -397,6 +397,7 @@ weak_function;
extern void __pthread_init_static_tls (struct link_map *) attribute_hidden;
extern size_t __pthread_get_minstack (const pthread_attr_t *attr);
/* Namespace save aliases. */
extern int __pthread_getschedparam (pthread_t thread_id, int *policy,

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
/* Copyright (C) 2003-2007, 2011 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
@ -165,7 +165,7 @@ __start_helper_thread (void)
and should go away automatically when canceled. */
pthread_attr_t attr;
(void) pthread_attr_init (&attr);
(void) pthread_attr_setstacksize (&attr, PTHREAD_STACK_MIN);
(void) pthread_attr_setstacksize (&attr, __pthread_get_minstack (&attr));
/* Block all signals in the helper thread but SIGSETXID. To do this
thoroughly we temporarily have to block all signals here. The