Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
On Linux when Python is linked to the musl C library, use a thread stack
size of at least 1 MiB instead of musl default which is 128 kiB. Patch by
Victor Stinner.
52 changes: 52 additions & 0 deletions configure

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

45 changes: 45 additions & 0 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -2462,6 +2462,51 @@ AS_CASE([$ac_sys_system],
]
)

dnl On Linux, check the thread stack size. musl (ex: Alpine Linux) uses
dnl a default thread stack size of 128 kB, whereas the glibc uses 8 MiB.
dnl Python uses at least 1 MiB.
if test "$ac_sys_system" = "Linux" -a "$cross_compiling" = no; then
AC_CACHE_CHECK([for thread stack size], [ac_cv_thread_stack_size], [
cat > conftest.c <<EOF
#include <pthread.h>

int main()
{
pthread_attr_t attrs;
size_t size;

int rc = pthread_attr_init(&attrs);
if (rc != 0) {
return 2;
}

rc = pthread_attr_getstacksize(&attrs, &size);
if (rc != 0) {
return 2;
}

if (size < 1024 * 1024) {
return 1;
}
return 0;
}
EOF

ac_cv_thread_stack_size="default"
if $CC -pthread $CFLAGS conftest.c -o conftest &>/dev/null; then
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I chose to use $CC -pthread to make sure that the pthread API can be used in the C program. We check if -pthread is supported above, near line 3064, which sets CC="$CC -pthread" if the flag is supported. I should maybe omit -pthread and move my code after the -pthread check.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think using -pthread explicitly is fine, it doesn't matter if it's passed to the compiler twice.

./conftest &>/dev/null
if test $? -eq 1; then
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For debugging it would probably be nice if the output said whether the stack size is good enough, needs overriding or just unknown (return code 2)

ac_cv_thread_stack_size=1048576
fi
fi
rm -f conftest.c conftest
])

if test "$ac_cv_thread_stack_size" != "default"; then
LDFLAGS="$LDFLAGS -Wl,-z,stack-size=$ac_cv_thread_stack_size"
fi
fi

AS_CASE([$enable_wasm_dynamic_linking],
[yes], [ac_cv_func_dlopen=yes],
[no], [ac_cv_func_dlopen=no],
Expand Down
Loading