diff mbox series

[uclibc-ng-devel] libpthread/nptl: create timer thread with sufficiant stack size (account for TLS)

Message ID 20210416212204.8758-1-ps.report@gmx.net
State New
Headers show
Series [uclibc-ng-devel] libpthread/nptl: create timer thread with sufficiant stack size (account for TLS) | expand

Commit Message

Peter Seiderer April 16, 2021, 9:22 p.m. UTC
Create timer thread with sufficiant stack size (take into account
allocated space for thread-local-storage), for this backport glibc
commit 'Create internal threads with sufficient stack size' ([1],
[2]) introducing __pthread_get_minstack() and use it in
__start_helper_thread().

Fixes timer_create() in case of linking with library using large
TLS area (e.g openblas, see [3]).

[1] https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=2c1094bd700e63a8d7f547b3f5495bedb55c0a08
[2] https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=630f4cc3aa019ede55976ea561f1a7af2f068639
[3] http://lists.busybox.net/pipermail/buildroot/2021-April/308281.html

Signed-off-by: Peter Seiderer <ps.report@gmx.net>
---
 libpthread/nptl/init.c                                   | 6 ++++++
 libpthread/nptl/pthreadP.h                               | 1 +
 libpthread/nptl/sysdeps/unix/sysv/linux/timer_routines.c | 2 +-
 3 files changed, 8 insertions(+), 1 deletion(-)

Comments

Waldemar Brodkorb April 18, 2021, 3:21 p.m. UTC | #1
Hi Peter,
Peter Seiderer wrote,

> Create timer thread with sufficiant stack size (take into account
> allocated space for thread-local-storage), for this backport glibc
> commit 'Create internal threads with sufficient stack size' ([1],
> [2]) introducing __pthread_get_minstack() and use it in
> __start_helper_thread().
> 
> Fixes timer_create() in case of linking with library using large
> TLS area (e.g openblas, see [3]).
> 
> [1] https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=2c1094bd700e63a8d7f547b3f5495bedb55c0a08
> [2] https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=630f4cc3aa019ede55976ea561f1a7af2f068639
> [3] http://lists.busybox.net/pipermail/buildroot/2021-April/308281.html
> 
> Signed-off-by: Peter Seiderer <ps.report@gmx.net>

Thanks, pushed
 Waldemar
diff mbox series

Patch

diff --git a/libpthread/nptl/init.c b/libpthread/nptl/init.c
index 4959d5ed8..5d25ded7d 100644
--- a/libpthread/nptl/init.c
+++ b/libpthread/nptl/init.c
@@ -337,3 +337,9 @@  __pthread_initialize_minimal_internal (void)
 }
 strong_alias (__pthread_initialize_minimal_internal,
 	      __pthread_initialize_minimal)
+
+size_t
+__pthread_get_minstack (const pthread_attr_t *attr)
+{
+  return __static_tls_size + PTHREAD_STACK_MIN;
+}
diff --git a/libpthread/nptl/pthreadP.h b/libpthread/nptl/pthreadP.h
index 13205512a..c686a4ca5 100644
--- a/libpthread/nptl/pthreadP.h
+++ b/libpthread/nptl/pthreadP.h
@@ -377,6 +377,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,
diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/timer_routines.c b/libpthread/nptl/sysdeps/unix/sysv/linux/timer_routines.c
index 514913317..60f2a724c 100644
--- a/libpthread/nptl/sysdeps/unix/sysv/linux/timer_routines.c
+++ b/libpthread/nptl/sysdeps/unix/sysv/linux/timer_routines.c
@@ -164,7 +164,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