82232c2d17
Based on work by Stefano Ragni on #16497 Tested on x86_64-musl with and without elogind, as well as with or without root rights on intel.
35 lines
1 KiB
Diff
35 lines
1 KiB
Diff
diff --git ./include/c11/threads_posix.h ./include/c11/threads_posix.h
|
|
index 45cb6075e6..1a2ea1a450 100644
|
|
--- ./include/c11/threads_posix.h
|
|
+++ ./include/c11/threads_posix.h
|
|
@@ -281,15 +281,29 @@ static inline int
|
|
thrd_create(thrd_t *thr, thrd_start_t func, void *arg)
|
|
{
|
|
struct impl_thrd_param *pack;
|
|
+#ifdef __GLIBC__
|
|
+ pthread_attr_t *attrp = NULL;
|
|
+#else
|
|
+ pthread_attr_t attr = { 0 };
|
|
+ pthread_attr_init(&attr);
|
|
+ pthread_attr_setstacksize(&attr, 8388608);
|
|
+ pthread_attr_t *attrp = &attr;
|
|
+#endif
|
|
assert(thr != NULL);
|
|
pack = (struct impl_thrd_param *)malloc(sizeof(struct impl_thrd_param));
|
|
if (!pack) return thrd_nomem;
|
|
pack->func = func;
|
|
pack->arg = arg;
|
|
- if (pthread_create(thr, NULL, impl_thrd_routine, pack) != 0) {
|
|
+ if (pthread_create(thr, attrp, impl_thrd_routine, pack) != 0) {
|
|
+#ifndef __GLIBC__
|
|
+ pthread_attr_destroy(&attr);
|
|
+#endif
|
|
free(pack);
|
|
return thrd_error;
|
|
}
|
|
+#ifndef __GLIBC__
|
|
+ pthread_attr_destroy(&attr);
|
|
+#endif
|
|
return thrd_success;
|
|
}
|
|
|