diff options
Diffstat (limited to 'src/aio/aio.c')
-rw-r--r-- | src/aio/aio.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/aio/aio.c b/src/aio/aio.c index 628e8420..38943bc0 100644 --- a/src/aio/aio.c +++ b/src/aio/aio.c @@ -5,6 +5,7 @@ #include <errno.h> #include <unistd.h> #include <stdlib.h> +#include <sys/auxv.h> #include "syscall.h" #include "atomic.h" #include "pthread_impl.h" @@ -256,6 +257,15 @@ static void *io_thread_func(void *ctx) return 0; } +static size_t io_thread_stack_size = MINSIGSTKSZ+2048; +static pthread_once_t init_stack_size_once; + +static void init_stack_size() +{ + unsigned long val = __getauxval(AT_MINSIGSTKSZ); + if (val > MINSIGSTKSZ) io_thread_stack_size = val + 512; +} + static int submit(struct aiocb *cb, int op) { int ret = 0; @@ -271,8 +281,9 @@ static int submit(struct aiocb *cb, int op) else pthread_attr_init(&a); } else { + pthread_once(&init_stack_size_once, init_stack_size); pthread_attr_init(&a); - pthread_attr_setstacksize(&a, PTHREAD_STACK_MIN); + pthread_attr_setstacksize(&a, io_thread_stack_size); pthread_attr_setguardsize(&a, 0); } pthread_attr_setdetachstate(&a, PTHREAD_CREATE_DETACHED); |