Skip to content

Commit

Permalink
bpo-40514: Add --with-experimental-isolated-subinterpreters (GH-19926)
Browse files Browse the repository at this point in the history
Add --with-experimental-isolated-subinterpreters build option to
configure: better isolate subinterpreters, experimental build mode.

When used, force the usage of the libc malloc() memory allocator,
since pymalloc relies on the unique global interpreter lock (GIL).
  • Loading branch information
vstinner authored May 5, 2020
1 parent 0b1e330 commit c5fa364
Show file tree
Hide file tree
Showing 5 changed files with 60 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Add ``--with-experimental-isolated-subinterpreters`` build option to
``configure``: better isolate subinterpreters, experimental build mode.
10 changes: 10 additions & 0 deletions Python/preconfig.c
Original file line number Diff line number Diff line change
Expand Up @@ -291,7 +291,17 @@ _PyPreConfig_InitCompatConfig(PyPreConfig *config)
config->coerce_c_locale_warn = 0;

config->dev_mode = -1;
#ifdef EXPERIMENTAL_ISOLATED_SUBINTERPRETERS
/* bpo-40512: pymalloc is not compatible with subinterpreters,
force usage of libc malloc() which is thread-safe. */
#ifdef Py_DEBUG
config->allocator = PYMEM_ALLOCATOR_MALLOC_DEBUG;
#else
config->allocator = PYMEM_ALLOCATOR_MALLOC;
#endif
#else
config->allocator = PYMEM_ALLOCATOR_NOT_SET;
#endif
#ifdef MS_WINDOWS
config->legacy_windows_fs_encoding = -1;
#endif
Expand Down
28 changes: 28 additions & 0 deletions configure
Original file line number Diff line number Diff line change
Expand Up @@ -845,6 +845,7 @@ with_computed_gotos
with_ensurepip
with_openssl
with_ssl_default_suites
with_experimental_isolated_subinterpreters
'
ac_precious_vars='build_alias
host_alias
Expand Down Expand Up @@ -1575,6 +1576,9 @@ Optional Packages:
leave OpenSSL's defaults untouched, STRING: use a
custom string, PROTOCOL_SSLv2 ignores the setting,
see Doc/library/ssl.rst
--with-experimental-isolated-subinterpreters
better isolate subinterpreters, experimental build
mode (default is no)
Some influential environment variables:
MACHDEP name for machine-dependent library files
Expand Down Expand Up @@ -17489,6 +17493,30 @@ $as_echo "#define PY_SSL_DEFAULT_CIPHERS 1" >>confdefs.h
fi


# --with-experimental-isolated-subinterpreters

{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-experimental-isolated-subinterpreters" >&5
$as_echo_n "checking for --with-experimental-isolated-subinterpreters... " >&6; }

# Check whether --with-experimental-isolated-subinterpreters was given.
if test "${with_experimental_isolated_subinterpreters+set}" = set; then :
withval=$with_experimental_isolated_subinterpreters;
if test "$withval" != no
then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; };
$as_echo "#define EXPERIMENTAL_ISOLATED_SUBINTERPRETERS 1" >>confdefs.h

else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; };
fi
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi



# generate output files
ac_config_files="$ac_config_files Makefile.pre Misc/python.pc Misc/python-embed.pc Misc/python-config.sh"
Expand Down
17 changes: 17 additions & 0 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -5717,6 +5717,23 @@ AC_MSG_RESULT(python)
AC_DEFINE(PY_SSL_DEFAULT_CIPHERS, 1)
])

# --with-experimental-isolated-subinterpreters
AH_TEMPLATE(EXPERIMENTAL_ISOLATED_SUBINTERPRETERS,
[Better isolate subinterpreters, experimental build mode.])
AC_MSG_CHECKING(for --with-experimental-isolated-subinterpreters)
AC_ARG_WITH(experimental-isolated-subinterpreters,
AS_HELP_STRING([--with-experimental-isolated-subinterpreters],
[better isolate subinterpreters, experimental build mode (default is no)]),
[
if test "$withval" != no
then
AC_MSG_RESULT(yes);
AC_DEFINE(EXPERIMENTAL_ISOLATED_SUBINTERPRETERS)
else
AC_MSG_RESULT(no);
fi],
[AC_MSG_RESULT(no)])


# generate output files
AC_CONFIG_FILES(Makefile.pre Misc/python.pc Misc/python-embed.pc Misc/python-config.sh)
Expand Down
3 changes: 3 additions & 0 deletions pyconfig.h.in
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,9 @@
/* Define if --enable-ipv6 is specified */
#undef ENABLE_IPV6

/* Better isolate subinterpreters, experimental build mode. */
#undef EXPERIMENTAL_ISOLATED_SUBINTERPRETERS

/* Define to 1 if your system stores words within floats with the most
significant word first */
#undef FLOAT_WORDS_BIGENDIAN
Expand Down

0 comments on commit c5fa364

Please sign in to comment.