Natanael Copa <natanael.c...@docker.com> added the comment: Exactly same as previous patch, but refactored to only have a single pthread_attr_destroy() call instead of 3.
diff --git a/Python/thread_pthread.h b/Python/thread_pthread.h index b7463c0ca6..1006a168fa 100644 --- a/Python/thread_pthread.h +++ b/Python/thread_pthread.h @@ -34,6 +34,8 @@ #undef THREAD_STACK_SIZE #define THREAD_STACK_SIZE 0x400000 #endif +/* minimum size of the default thread stack size */ +#define THREAD_STACK_MIN_DEFAULT 0x100000 /* for safety, ensure a viable minimum stacksize */ #define THREAD_STACK_MIN 0x8000 /* 32 KiB */ #else /* !_POSIX_THREAD_ATTR_STACKSIZE */ @@ -167,7 +169,7 @@ unsigned long PyThread_start_new_thread(void (*func)(void *), void *arg) { pthread_t th; - int status; + int status = -1; #if defined(THREAD_STACK_SIZE) || defined(PTHREAD_SYSTEM_SCHED_SUPPORTED) pthread_attr_t attrs; #endif @@ -187,11 +189,15 @@ PyThread_start_new_thread(void (*func)(void *), void *arg) PyThreadState *tstate = PyThreadState_GET(); size_t stacksize = tstate ? tstate->interp->pythread_stacksize : 0; tss = (stacksize != 0) ? stacksize : THREAD_STACK_SIZE; + if (tss == 0 && THREAD_STACK_SIZE == 0) { + if (pthread_attr_getstacksize(&attrs, &tss) != 0) + goto thread_abort; + if (tss != 0 && tss < THREAD_STACK_MIN_DEFAULT) + tss = THREAD_STACK_MIN_DEFAULT; + } if (tss != 0) { - if (pthread_attr_setstacksize(&attrs, tss) != 0) { - pthread_attr_destroy(&attrs); - return PYTHREAD_INVALID_THREAD_ID; - } + if (pthread_attr_setstacksize(&attrs, tss) != 0) + goto thread_abort; } #endif #if defined(PTHREAD_SYSTEM_SCHED_SUPPORTED) @@ -209,6 +215,7 @@ PyThread_start_new_thread(void (*func)(void *), void *arg) ); #if defined(THREAD_STACK_SIZE) || defined(PTHREAD_SYSTEM_SCHED_SUPPORTED) +thread_abort: pthread_attr_destroy(&attrs); #endif if (status != 0) ---------- nosy: -serhiy.storchaka, vstinner _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue32307> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com