summaryrefslogtreecommitdiffstats
path: root/Include/cpython/initconfig.h
diff options
context:
space:
mode:
authorEric Snow <ericsnowcurrently@gmail.com>2022-10-26 17:16:30 (GMT)
committerGitHub <noreply@github.com>2022-10-26 17:16:30 (GMT)
commitf32369480df54cb06884537ef16cb5a4143393f0 (patch)
treede906b0a7decf4c16d94d5311674ba19c278f9af /Include/cpython/initconfig.h
parent24c56b4642d467c194c57188d4a3b1848ee444c2 (diff)
downloadcpython-f32369480df54cb06884537ef16cb5a4143393f0.zip
cpython-f32369480df54cb06884537ef16cb5a4143393f0.tar.gz
cpython-f32369480df54cb06884537ef16cb5a4143393f0.tar.bz2
gh-98608: Change _Py_NewInterpreter() to _Py_NewInterpreterFromConfig() (gh-98609)
(see https://github.com/python/cpython/issues/98608) This change does the following: 1. change the argument to a new `_PyInterpreterConfig` struct 2. rename the function to `_Py_NewInterpreterFromConfig()`, inspired by `Py_InitializeFromConfig()` (takes a `_PyInterpreterConfig` instead of `isolated_subinterpreter`) 3. split up the boolean `isolated_subinterpreter` into the corresponding multiple granular settings * allow_fork * allow_subprocess * allow_threads 4. add `PyInterpreterState.feature_flags` to store those settings 5. add a function for checking if a feature is enabled on an opaque `PyInterpreterState *` 6. drop `PyConfig._isolated_interpreter` The existing default (see `Py_NewInterpeter()` and `Py_Initialize*()`) allows fork, subprocess, and threads and the optional "isolated" interpreter (see the `_xxsubinterpreters` module) disables all three. None of that changes here; the defaults are preserved. Note that the given `_PyInterpreterConfig` will not be used outside `_Py_NewInterpreterFromConfig()`, nor preserved. This contrasts with how `PyConfig` is currently preserved, used, and even modified outside `Py_InitializeFromConfig()`. I'd rather just avoid that mess from the start for `_PyInterpreterConfig`. We can preserve it later if we find an actual need. This change allows us to follow up with a number of improvements (e.g. stop disallowing subprocess and support disallowing exec instead). (Note that this PR adds "private" symbols. We'll probably make them public, and add docs, in a separate change.)
Diffstat (limited to 'Include/cpython/initconfig.h')
-rw-r--r--Include/cpython/initconfig.h19
1 files changed, 15 insertions, 4 deletions
diff --git a/Include/cpython/initconfig.h b/Include/cpython/initconfig.h
index c22c8d5..64748cf 100644
--- a/Include/cpython/initconfig.h
+++ b/Include/cpython/initconfig.h
@@ -213,10 +213,6 @@ typedef struct PyConfig {
// If equal to 0, stop Python initialization before the "main" phase.
int _init_main;
- // If non-zero, disallow threads, subprocesses, and fork.
- // Default: 0.
- int _isolated_interpreter;
-
// If non-zero, we believe we're running from a source tree.
int _is_python_build;
} PyConfig;
@@ -245,6 +241,21 @@ PyAPI_FUNC(PyStatus) PyConfig_SetWideStringList(PyConfig *config,
Py_ssize_t length, wchar_t **items);
+/* --- PyInterpreterConfig ------------------------------------ */
+
+typedef struct {
+ int allow_fork;
+ int allow_subprocess;
+ int allow_threads;
+} _PyInterpreterConfig;
+
+#define _PyInterpreterConfig_LEGACY_INIT \
+ { \
+ .allow_fork = 1, \
+ .allow_subprocess = 1, \
+ .allow_threads = 1, \
+ }
+
/* --- Helper functions --------------------------------------- */
/* Get the original command line arguments, before Python modified them.