summaryrefslogtreecommitdiff
path: root/nptl/tst-tls3.c
diff options
context:
space:
mode:
authorFlorian Weimer <fweimer@redhat.com>2016-08-16 11:06:13 +0200
committerFlorian Weimer <fweimer@redhat.com>2016-08-16 11:06:13 +0200
commitfc86a87d788596c6d418f0fa79c79fffc6cfd08f (patch)
tree384b66db04365575e9c6c48eb63148b98c289f67 /nptl/tst-tls3.c
parent9e2ff6c9cc54c0b4402b8d49e4abe7000fde7617 (diff)
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.
Diffstat (limited to 'nptl/tst-tls3.c')
-rw-r--r--nptl/tst-tls3.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/nptl/tst-tls3.c b/nptl/tst-tls3.c
index 982c1fdd4c..649cb8f0d5 100644
--- a/nptl/tst-tls3.c
+++ b/nptl/tst-tls3.c
@@ -29,6 +29,11 @@
#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
static pthread_t th[N];
@@ -72,6 +77,9 @@ int nsigs;
int
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))
{
puts ("initial thread's struct pthread not aligned enough");
@@ -127,7 +135,7 @@ do_test (void)
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");
return 1;