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 <[email protected]>
}
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;
+}
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,
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