* [PATCH COMMITTED] nptl/tst-tls3-malloc: Force freeing of thread stacks
@ 2016-08-16 9:07 Florian Weimer
0 siblings, 0 replies; only message in thread
From: Florian Weimer @ 2016-08-16 9:07 UTC (permalink / raw)
To: libc-alpha
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.
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.
diff --git a/nptl/tst-tls3-malloc.c b/nptl/tst-tls3-malloc.c
index 5eab3cd..8a580fa 100644
--- a/nptl/tst-tls3-malloc.c
+++ b/nptl/tst-tls3-malloc.c
@@ -19,6 +19,11 @@
/* Reuse the test. */
#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>
/* Interpose a minimal malloc implementation. This implementation
diff --git a/nptl/tst-tls3.c b/nptl/tst-tls3.c
index 982c1fd..649cb8f 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;
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2016-08-16 9:07 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-08-16 9:07 [PATCH COMMITTED] nptl/tst-tls3-malloc: Force freeing of thread stacks Florian Weimer
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).