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