mirror of
https://sourceware.org/git/glibc.git
synced 2025-06-03 13:22:05 +03:00
nptl/tst-tls3-malloc: Force freeing of thread stacks
It turns out that due to the reduced stack size in tst-tls3 and the (fixed) default stack cache size, allocated TLS variables are never freed, so the test coverage for tst-tls3-malloc is less than complete. This change increases the thread stack size for tst-tls3-malloc only, to make sure thread stacks and TLS variables are freed.
This commit is contained in:
parent
9e2ff6c9cc
commit
fc86a87d78
@ -1,3 +1,10 @@
|
|||||||
|
2016-08-16 Florian Weimer <fweimer@redhat.com>
|
||||||
|
|
||||||
|
* nptl/tst-tls3.c (default_stack_size_in_mb, stack_size_in_mb):
|
||||||
|
New.
|
||||||
|
(do_test): Apply default_stack_size_in_mb if not set.
|
||||||
|
* nptl/tst-tls3-malloc.c (stack_size_in_mb): Override default.
|
||||||
|
|
||||||
2016-08-15 Andreas Schwab <schwab@suse.de>
|
2016-08-15 Andreas Schwab <schwab@suse.de>
|
||||||
|
|
||||||
[BZ #20435]
|
[BZ #20435]
|
||||||
|
@ -19,6 +19,11 @@
|
|||||||
/* Reuse the test. */
|
/* Reuse the test. */
|
||||||
#include "tst-tls3.c"
|
#include "tst-tls3.c"
|
||||||
|
|
||||||
|
/* Increase the thread stack size to 10 MiB, so that some thread
|
||||||
|
stacks are actually freed. (The stack cache size is currently
|
||||||
|
hard-wired to 40 MiB in allocatestack.c.) */
|
||||||
|
static long stack_size_in_mb = 10;
|
||||||
|
|
||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
|
|
||||||
/* Interpose a minimal malloc implementation. This implementation
|
/* Interpose a minimal malloc implementation. This implementation
|
||||||
|
@ -29,6 +29,11 @@
|
|||||||
|
|
||||||
#define THE_SIG SIGUSR1
|
#define THE_SIG SIGUSR1
|
||||||
|
|
||||||
|
/* The stack size can be overriden. With a sufficiently large stack
|
||||||
|
size, thread stacks for terminated threads are freed, but this does
|
||||||
|
not happen with the default size of 1 MiB. */
|
||||||
|
enum { default_stack_size_in_mb = 1 };
|
||||||
|
static long stack_size_in_mb;
|
||||||
|
|
||||||
#define N 10
|
#define N 10
|
||||||
static pthread_t th[N];
|
static pthread_t th[N];
|
||||||
@ -72,6 +77,9 @@ int nsigs;
|
|||||||
int
|
int
|
||||||
do_test (void)
|
do_test (void)
|
||||||
{
|
{
|
||||||
|
if (stack_size_in_mb == 0)
|
||||||
|
stack_size_in_mb = default_stack_size_in_mb;
|
||||||
|
|
||||||
if ((uintptr_t) pthread_self () & (TCB_ALIGNMENT - 1))
|
if ((uintptr_t) pthread_self () & (TCB_ALIGNMENT - 1))
|
||||||
{
|
{
|
||||||
puts ("initial thread's struct pthread not aligned enough");
|
puts ("initial thread's struct pthread not aligned enough");
|
||||||
@ -127,7 +135,7 @@ do_test (void)
|
|||||||
exit (1);
|
exit (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pthread_attr_setstacksize (&a, 1 * 1024 * 1024) != 0)
|
if (pthread_attr_setstacksize (&a, stack_size_in_mb * 1024 * 1024) != 0)
|
||||||
{
|
{
|
||||||
puts ("attr_setstacksize failed");
|
puts ("attr_setstacksize failed");
|
||||||
return 1;
|
return 1;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user