[3.9] bpo-40514: Remove --with-experimental-isolated-subinterpreters in 3.9 (GH-20228)
Remove --with-experimental-isolated-subinterpreters configure option
in Python 3.9: the experiment continues in the master branch, but
it's no longer needed in 3.9.
diff --git a/Include/internal/pycore_ceval.h b/Include/internal/pycore_ceval.h
index 3689900..18c8f02 100644
--- a/Include/internal/pycore_ceval.h
+++ b/Include/internal/pycore_ceval.h
@@ -50,11 +50,7 @@
PyObject *kwdefs, PyObject *closure,
PyObject *name, PyObject *qualname);
-#ifdef EXPERIMENTAL_ISOLATED_SUBINTERPRETERS
-extern int _PyEval_ThreadsInitialized(PyInterpreterState *interp);
-#else
extern int _PyEval_ThreadsInitialized(struct pyruntimestate *runtime);
-#endif
extern PyStatus _PyEval_InitGIL(PyThreadState *tstate);
extern void _PyEval_FiniGIL(PyThreadState *tstate);
diff --git a/Include/internal/pycore_interp.h b/Include/internal/pycore_interp.h
index f04ea33..551ad83 100644
--- a/Include/internal/pycore_interp.h
+++ b/Include/internal/pycore_interp.h
@@ -46,9 +46,6 @@
/* Request for dropping the GIL */
_Py_atomic_int gil_drop_request;
struct _pending_calls pending;
-#ifdef EXPERIMENTAL_ISOLATED_SUBINTERPRETERS
- struct _gil_runtime_state gil;
-#endif
};
/* fs_codec.encoding is initialized to NULL.
diff --git a/Include/internal/pycore_pystate.h b/Include/internal/pycore_pystate.h
index d96ba31..8dc64db 100644
--- a/Include/internal/pycore_pystate.h
+++ b/Include/internal/pycore_pystate.h
@@ -49,18 +49,10 @@
/* Variable and macro for in-line access to current thread
and interpreter state */
-#ifdef EXPERIMENTAL_ISOLATED_SUBINTERPRETERS
-PyAPI_FUNC(PyThreadState*) _PyThreadState_GetTSS(void);
-#endif
-
static inline PyThreadState*
_PyRuntimeState_GetThreadState(_PyRuntimeState *runtime)
{
-#ifdef EXPERIMENTAL_ISOLATED_SUBINTERPRETERS
- return _PyThreadState_GetTSS();
-#else
return (PyThreadState*)_Py_atomic_load_relaxed(&runtime->gilstate.tstate_current);
-#endif
}
/* Get the current Python thread state.
@@ -75,11 +67,7 @@
static inline PyThreadState*
_PyThreadState_GET(void)
{
-#ifdef EXPERIMENTAL_ISOLATED_SUBINTERPRETERS
- return _PyThreadState_GetTSS();
-#else
return _PyRuntimeState_GetThreadState(&_PyRuntime);
-#endif
}
/* Redefine PyThreadState_GET() as an alias to _PyThreadState_GET() */
diff --git a/Include/internal/pycore_runtime.h b/Include/internal/pycore_runtime.h
index ebdc12b..34eb492 100644
--- a/Include/internal/pycore_runtime.h
+++ b/Include/internal/pycore_runtime.h
@@ -19,9 +19,7 @@
the main thread of the main interpreter can handle signals: see
_Py_ThreadCanHandleSignals(). */
_Py_atomic_int signals_pending;
-#ifndef EXPERIMENTAL_ISOLATED_SUBINTERPRETERS
struct _gil_runtime_state gil;
-#endif
};
/* GIL state */
diff --git a/Misc/NEWS.d/next/Build/2020-05-19-17-43-38.bpo-40514.gW-66U.rst b/Misc/NEWS.d/next/Build/2020-05-19-17-43-38.bpo-40514.gW-66U.rst
new file mode 100644
index 0000000..a92f2b6
--- /dev/null
+++ b/Misc/NEWS.d/next/Build/2020-05-19-17-43-38.bpo-40514.gW-66U.rst
@@ -0,0 +1,3 @@
+Remove ``--with-experimental-isolated-subinterpreters`` configure option in
+Python 3.9: the experiment continues in the master branch, but it's no
+longer needed in 3.9.
diff --git a/Modules/_xxsubinterpretersmodule.c b/Modules/_xxsubinterpretersmodule.c
index 8a6fce9..de11c09 100644
--- a/Modules/_xxsubinterpretersmodule.c
+++ b/Modules/_xxsubinterpretersmodule.c
@@ -1939,20 +1939,6 @@
return -1;
}
-#ifdef EXPERIMENTAL_ISOLATED_SUBINTERPRETERS
- // Switch to interpreter.
- PyThreadState *new_tstate = PyInterpreterState_ThreadHead(interp);
- PyThreadState *save1 = PyEval_SaveThread();
-
- (void)PyThreadState_Swap(new_tstate);
-
- // Run the script.
- _sharedexception *exc = NULL;
- int result = _run_script(interp, codestr, shared, &exc);
-
- // Switch back.
- PyEval_RestoreThread(save1);
-#else
// Switch to interpreter.
PyThreadState *save_tstate = NULL;
if (interp != PyInterpreterState_Get()) {
@@ -1970,7 +1956,6 @@
if (save_tstate != NULL) {
PyThreadState_Swap(save_tstate);
}
-#endif
// Propagate any exception out to the caller.
if (exc != NULL) {
diff --git a/Modules/gcmodule.c b/Modules/gcmodule.c
index a44752b..56dcb10 100644
--- a/Modules/gcmodule.c
+++ b/Modules/gcmodule.c
@@ -1181,14 +1181,6 @@
_PyTime_t t1 = 0; /* initialize to prevent a compiler warning */
GCState *gcstate = &tstate->interp->gc;
-#ifdef EXPERIMENTAL_ISOLATED_SUBINTERPRETERS
- if (tstate->interp->config._isolated_interpreter) {
- // bpo-40533: The garbage collector must not be run on parallel on
- // Python objects shared by multiple interpreters.
- return 0;
- }
-#endif
-
if (gcstate->debug & DEBUG_STATS) {
PySys_WriteStderr("gc: collecting generation %d...\n", generation);
show_stats_each_generations(gcstate);
diff --git a/Objects/dictobject.c b/Objects/dictobject.c
index 809a5ed..faee6bc 100644
--- a/Objects/dictobject.c
+++ b/Objects/dictobject.c
@@ -251,12 +251,6 @@
#define PyDict_MAXFREELIST 80
#endif
-/* bpo-40521: dict free lists are shared by all interpreters. */
-#ifdef EXPERIMENTAL_ISOLATED_SUBINTERPRETERS
-# undef PyDict_MAXFREELIST
-# define PyDict_MAXFREELIST 0
-#endif
-
#if PyDict_MAXFREELIST > 0
static PyDictObject *free_list[PyDict_MAXFREELIST];
static int numfree = 0;
diff --git a/Objects/frameobject.c b/Objects/frameobject.c
index af32276..a2fc0a4 100644
--- a/Objects/frameobject.c
+++ b/Objects/frameobject.c
@@ -559,12 +559,6 @@
/* max value for numfree */
#define PyFrame_MAXFREELIST 200
-/* bpo-40521: frame free lists are shared by all interpreters. */
-#ifdef EXPERIMENTAL_ISOLATED_SUBINTERPRETERS
-# undef PyFrame_MAXFREELIST
-# define PyFrame_MAXFREELIST 0
-#endif
-
#if PyFrame_MAXFREELIST > 0
static PyFrameObject *free_list = NULL;
static int numfree = 0; /* number of frames currently in free_list */
diff --git a/Objects/listobject.c b/Objects/listobject.c
index 37fadca..f9eb370 100644
--- a/Objects/listobject.c
+++ b/Objects/listobject.c
@@ -101,12 +101,6 @@
# define PyList_MAXFREELIST 80
#endif
-/* bpo-40521: list free lists are shared by all interpreters. */
-#ifdef EXPERIMENTAL_ISOLATED_SUBINTERPRETERS
-# undef PyList_MAXFREELIST
-# define PyList_MAXFREELIST 0
-#endif
-
static PyListObject *free_list[PyList_MAXFREELIST];
static int numfree = 0;
diff --git a/Objects/tupleobject.c b/Objects/tupleobject.c
index c0b59c0..9092c9f 100644
--- a/Objects/tupleobject.c
+++ b/Objects/tupleobject.c
@@ -22,12 +22,6 @@
#define PyTuple_MAXFREELIST 2000 /* Maximum number of tuples of each size to save */
#endif
-/* bpo-40521: tuple free lists are shared by all interpreters. */
-#ifdef EXPERIMENTAL_ISOLATED_SUBINTERPRETERS
-# undef PyTuple_MAXSAVESIZE
-# define PyTuple_MAXSAVESIZE 0
-#endif
-
#if PyTuple_MAXSAVESIZE > 0
/* Entries 1 up to PyTuple_MAXSAVESIZE are free lists, entry 0 is the empty
tuple () of which at most one instance will be allocated.
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index 243f881..353423b 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -19,10 +19,7 @@
#include "clinic/typeobject.c.h"
-/* bpo-40521: Type method cache is shared by all subinterpreters */
-#ifndef EXPERIMENTAL_ISOLATED_SUBINTERPRETERS
-# define MCACHE
-#endif
+#define MCACHE
#ifdef MCACHE
/* Support type attribute cache */
@@ -63,10 +60,7 @@
static size_t method_cache_collisions = 0;
#endif
-/* bpo-40521: Interned strings are shared by all subinterpreters */
-#ifndef EXPERIMENTAL_ISOLATED_SUBINTERPRETERS
-# define INTERN_NAME_STRINGS
-#endif
+#define INTERN_NAME_STRINGS
/* alphabetical order */
_Py_IDENTIFIER(__abstractmethods__);
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index ea46a44..1082eb4 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -198,10 +198,7 @@
# define OVERALLOCATE_FACTOR 4
#endif
-/* bpo-40521: Interned strings are shared by all interpreters. */
-#ifndef EXPERIMENTAL_ISOLATED_SUBINTERPRETERS
-# define INTERNED_STRINGS
-#endif
+#define INTERNED_STRINGS
/* This dictionary holds all interned unicode strings. Note that references
to strings in this dictionary are *not* counted in the string's ob_refcnt.
@@ -288,10 +285,7 @@
/* List of static strings. */
static _Py_Identifier *static_strings = NULL;
-/* bpo-40521: Latin1 singletons are shared by all interpreters. */
-#ifndef EXPERIMENTAL_ISOLATED_SUBINTERPRETERS
-# define LATIN1_SINGLETONS
-#endif
+#define LATIN1_SINGLETONS
#ifdef LATIN1_SINGLETONS
/* Single character Unicode strings in the Latin-1 range are being
diff --git a/Python/ceval.c b/Python/ceval.c
index 43ea1c7..ff67c83 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -250,21 +250,6 @@
}
-#ifdef EXPERIMENTAL_ISOLATED_SUBINTERPRETERS
-int
-_PyEval_ThreadsInitialized(PyInterpreterState *interp)
-{
- return gil_created(&interp->ceval.gil);
-}
-
-int
-PyEval_ThreadsInitialized(void)
-{
- // Fatal error if there is no current interpreter
- PyInterpreterState *interp = PyInterpreterState_Get();
- return _PyEval_ThreadsInitialized(interp);
-}
-#else
int
_PyEval_ThreadsInitialized(_PyRuntimeState *runtime)
{
@@ -277,25 +262,18 @@
_PyRuntimeState *runtime = &_PyRuntime;
return _PyEval_ThreadsInitialized(runtime);
}
-#endif
PyStatus
_PyEval_InitGIL(PyThreadState *tstate)
{
-#ifndef EXPERIMENTAL_ISOLATED_SUBINTERPRETERS
if (!_Py_IsMainInterpreter(tstate)) {
/* Currently, the GIL is shared by all interpreters,
and only the main interpreter is responsible to create
and destroy it. */
return _PyStatus_OK();
}
-#endif
-#ifdef EXPERIMENTAL_ISOLATED_SUBINTERPRETERS
- struct _gil_runtime_state *gil = &tstate->interp->ceval.gil;
-#else
struct _gil_runtime_state *gil = &tstate->interp->runtime->ceval.gil;
-#endif
assert(!gil_created(gil));
PyThread_init_thread();
@@ -310,20 +288,14 @@
void
_PyEval_FiniGIL(PyThreadState *tstate)
{
-#ifndef EXPERIMENTAL_ISOLATED_SUBINTERPRETERS
if (!_Py_IsMainInterpreter(tstate)) {
/* Currently, the GIL is shared by all interpreters,
and only the main interpreter is responsible to create
and destroy it. */
return;
}
-#endif
-#ifdef EXPERIMENTAL_ISOLATED_SUBINTERPRETERS
- struct _gil_runtime_state *gil = &tstate->interp->ceval.gil;
-#else
struct _gil_runtime_state *gil = &tstate->interp->runtime->ceval.gil;
-#endif
if (!gil_created(gil)) {
/* First Py_InitializeFromConfig() call: the GIL doesn't exist
yet: do nothing. */
@@ -408,13 +380,9 @@
take_gil(tstate);
struct _gilstate_runtime_state *gilstate = &tstate->interp->runtime->gilstate;
-#ifdef EXPERIMENTAL_ISOLATED_SUBINTERPRETERS
- (void)_PyThreadState_Swap(gilstate, tstate);
-#else
if (_PyThreadState_Swap(gilstate, tstate) != NULL) {
Py_FatalError("non-NULL old thread state");
}
-#endif
}
void
@@ -444,11 +412,7 @@
PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
ensure_tstate_not_null(__func__, tstate);
-#ifdef EXPERIMENTAL_ISOLATED_SUBINTERPRETERS
- struct _gil_runtime_state *gil = &tstate->interp->ceval.gil;
-#else
struct _gil_runtime_state *gil = &runtime->ceval.gil;
-#endif
if (!gil_created(gil)) {
return;
}
@@ -480,21 +444,12 @@
PyEval_SaveThread(void)
{
_PyRuntimeState *runtime = &_PyRuntime;
-#ifdef EXPERIMENTAL_ISOLATED_SUBINTERPRETERS
- PyThreadState *old_tstate = _PyThreadState_GET();
- PyThreadState *tstate = _PyThreadState_Swap(&runtime->gilstate, old_tstate);
-#else
PyThreadState *tstate = _PyThreadState_Swap(&runtime->gilstate, NULL);
-#endif
ensure_tstate_not_null(__func__, tstate);
struct _ceval_runtime_state *ceval = &runtime->ceval;
struct _ceval_state *ceval2 = &tstate->interp->ceval;
-#ifdef EXPERIMENTAL_ISOLATED_SUBINTERPRETERS
- assert(gil_created(&ceval2->gil));
-#else
assert(gil_created(&ceval->gil));
-#endif
drop_gil(ceval, ceval2, tstate);
return tstate;
}
@@ -753,9 +708,7 @@
_PyEval_InitRuntimeState(struct _ceval_runtime_state *ceval)
{
_Py_CheckRecursionLimit = Py_DEFAULT_RECURSION_LIMIT;
-#ifndef EXPERIMENTAL_ISOLATED_SUBINTERPRETERS
_gil_initialize(&ceval->gil);
-#endif
}
int
@@ -771,10 +724,6 @@
return -1;
}
-#ifdef EXPERIMENTAL_ISOLATED_SUBINTERPRETERS
- _gil_initialize(&ceval->gil);
-#endif
-
return 0;
}
@@ -919,13 +868,9 @@
take_gil(tstate);
-#ifdef EXPERIMENTAL_ISOLATED_SUBINTERPRETERS
- (void)_PyThreadState_Swap(&runtime->gilstate, tstate);
-#else
if (_PyThreadState_Swap(&runtime->gilstate, tstate) != NULL) {
Py_FatalError("orphan tstate");
}
-#endif
}
/* Check for asynchronous exception. */
diff --git a/Python/ceval_gil.h b/Python/ceval_gil.h
index 56944b8..3510675 100644
--- a/Python/ceval_gil.h
+++ b/Python/ceval_gil.h
@@ -144,11 +144,7 @@
drop_gil(struct _ceval_runtime_state *ceval, struct _ceval_state *ceval2,
PyThreadState *tstate)
{
-#ifdef EXPERIMENTAL_ISOLATED_SUBINTERPRETERS
- struct _gil_runtime_state *gil = &ceval2->gil;
-#else
struct _gil_runtime_state *gil = &ceval->gil;
-#endif
if (!_Py_atomic_load_relaxed(&gil->locked)) {
Py_FatalError("drop_gil: GIL is not locked");
}
@@ -232,11 +228,7 @@
PyInterpreterState *interp = tstate->interp;
struct _ceval_runtime_state *ceval = &interp->runtime->ceval;
struct _ceval_state *ceval2 = &interp->ceval;
-#ifdef EXPERIMENTAL_ISOLATED_SUBINTERPRETERS
- struct _gil_runtime_state *gil = &ceval2->gil;
-#else
struct _gil_runtime_state *gil = &ceval->gil;
-#endif
/* Check that _PyEval_InitThreads() was called to create the lock */
assert(gil_created(gil));
@@ -328,22 +320,12 @@
void _PyEval_SetSwitchInterval(unsigned long microseconds)
{
-#ifdef EXPERIMENTAL_ISOLATED_SUBINTERPRETERS
- PyInterpreterState *interp = PyInterpreterState_Get();
- struct _gil_runtime_state *gil = &interp->ceval.gil;
-#else
struct _gil_runtime_state *gil = &_PyRuntime.ceval.gil;
-#endif
gil->interval = microseconds;
}
unsigned long _PyEval_GetSwitchInterval()
{
-#ifdef EXPERIMENTAL_ISOLATED_SUBINTERPRETERS
- PyInterpreterState *interp = PyInterpreterState_Get();
- struct _gil_runtime_state *gil = &interp->ceval.gil;
-#else
struct _gil_runtime_state *gil = &_PyRuntime.ceval.gil;
-#endif
return gil->interval;
}
diff --git a/Python/preconfig.c b/Python/preconfig.c
index fd94d7d..262738f 100644
--- a/Python/preconfig.c
+++ b/Python/preconfig.c
@@ -291,17 +291,7 @@
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
diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c
index da66a82..bee24c6 100644
--- a/Python/pylifecycle.c
+++ b/Python/pylifecycle.c
@@ -1561,12 +1561,10 @@
/* Copy the current interpreter config into the new interpreter */
const PyConfig *config;
-#ifndef EXPERIMENTAL_ISOLATED_SUBINTERPRETERS
if (save_tstate != NULL) {
config = _PyInterpreterState_GetConfig(save_tstate->interp);
}
else
-#endif
{
/* No current thread state, copy from the main interpreter */
PyInterpreterState *main_interp = PyInterpreterState_Main();
diff --git a/Python/pystate.c b/Python/pystate.c
index 119fe31..dd95750 100644
--- a/Python/pystate.c
+++ b/Python/pystate.c
@@ -956,14 +956,6 @@
}
-#ifdef EXPERIMENTAL_ISOLATED_SUBINTERPRETERS
-PyThreadState*
-_PyThreadState_GetTSS(void) {
- return PyThread_tss_get(&_PyRuntime.gilstate.autoTSSkey);
-}
-#endif
-
-
PyThreadState *
_PyThreadState_UncheckedGet(void)
{
@@ -983,11 +975,7 @@
PyThreadState *
_PyThreadState_Swap(struct _gilstate_runtime_state *gilstate, PyThreadState *newts)
{
-#ifdef EXPERIMENTAL_ISOLATED_SUBINTERPRETERS
- PyThreadState *oldts = _PyThreadState_GetTSS();
-#else
PyThreadState *oldts = _PyRuntimeGILState_GetThreadState(gilstate);
-#endif
_PyRuntimeGILState_SetThreadState(gilstate, newts);
/* It should not be possible for more than one thread state
@@ -1006,9 +994,6 @@
errno = err;
}
#endif
-#ifdef EXPERIMENTAL_ISOLATED_SUBINTERPRETERS
- PyThread_tss_set(&gilstate->autoTSSkey, newts);
-#endif
return oldts;
}
@@ -1378,9 +1363,7 @@
/* Ensure that _PyEval_InitThreads() and _PyGILState_Init() have been
called by Py_Initialize() */
-#ifndef EXPERIMENTAL_ISOLATED_SUBINTERPRETERS
assert(_PyEval_ThreadsInitialized(runtime));
-#endif
assert(gilstate->autoInterpreterState);
PyThreadState *tcur = (PyThreadState *)PyThread_tss_get(&gilstate->autoTSSkey);
diff --git a/configure b/configure
index 56d66d0..b37c695 100755
--- a/configure
+++ b/configure
@@ -848,7 +848,6 @@
with_openssl
with_ssl_default_suites
with_builtin_hashlib_hashes
-with_experimental_isolated_subinterpreters
'
ac_precious_vars='build_alias
host_alias
@@ -1585,9 +1584,6 @@
--with-builtin-hashlib-hashes=md5,sha1,sha256,sha512,sha3,blake2
builtin hash modules, md5, sha1, sha256, sha512,
sha3 (with shake), blake2
- --with-experimental-isolated-subinterpreters
- better isolate subinterpreters, experimental build
- mode (default is no)
Some influential environment variables:
MACHDEP name for machine-dependent library files
@@ -17581,31 +17577,6 @@
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"
diff --git a/configure.ac b/configure.ac
index 497d7c1..2d63198 100644
--- a/configure.ac
+++ b/configure.ac
@@ -5779,24 +5779,6 @@
AC_DEFINE_UNQUOTED(PY_BUILTIN_HASHLIB_HASHES, "$default_hashlib_hashes")
])
-# --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)
AC_CONFIG_FILES([Modules/ld_so_aix], [chmod +x Modules/ld_so_aix])
diff --git a/pyconfig.h.in b/pyconfig.h.in
index bc906a8..c9589cd 100644
--- a/pyconfig.h.in
+++ b/pyconfig.h.in
@@ -38,9 +38,6 @@
/* 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