aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Python/pylifecycle.c
diff options
context:
space:
mode:
authorEric Snow <ericsnowcurrently@gmail.com>2023-11-01 17:36:40 -0600
committerGitHub <noreply@github.com>2023-11-01 17:36:40 -0600
commit9322ce90ac8f4d4647a59bbfab48fad6f4e4e856 (patch)
treec3dd4e202f02a639bca0412b71d1464fd4f624c5 /Python/pylifecycle.c
parentcde1071b2a72e8261ca66053ef61431b7f3a81fd (diff)
downloadcpython-9322ce90ac8f4d4647a59bbfab48fad6f4e4e856.tar.gz
cpython-9322ce90ac8f4d4647a59bbfab48fad6f4e4e856.zip
gh-76785: Crossinterp utils additions (gh-111530)
This moves several general internal APIs out of _xxsubinterpretersmodule.c and into the new Python/crossinterp.c (and the corresponding internal headers). Specifically: * _Py_excinfo, etc.: the initial implementation for non-object exception snapshots (in pycore_pyerrors.h and Python/errors.c) * _PyXI_exception_info, etc.: helpers for passing an exception beween interpreters (wraps _Py_excinfo) * _PyXI_namespace, etc.: helpers for copying a dict of attrs between interpreters * _PyXI_Enter(), _PyXI_Exit(): functions that abstract out the transitions between one interpreter and a second that will do some work temporarily Again, these were all abstracted out of _xxsubinterpretersmodule.c as generalizations. I plan on proposing these as public API at some point.
Diffstat (limited to 'Python/pylifecycle.c')
-rw-r--r--Python/pylifecycle.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c
index 3c57056fb81..ea84ca0b9c3 100644
--- a/Python/pylifecycle.c
+++ b/Python/pylifecycle.c
@@ -738,6 +738,7 @@ pycore_init_types(PyInterpreterState *interp)
if (_PyStatus_EXCEPTION(status)) {
return status;
}
+
return _PyStatus_OK();
}
@@ -854,6 +855,11 @@ pycore_interp_init(PyThreadState *tstate)
goto done;
}
+ status = _PyXI_Init(interp);
+ if (_PyStatus_EXCEPTION(status)) {
+ goto done;
+ }
+
const PyConfig *config = _PyInterpreterState_GetConfig(interp);
status = _PyImport_InitCore(tstate, sysmod, config->_install_importlib);
@@ -1772,6 +1778,7 @@ finalize_interp_clear(PyThreadState *tstate)
{
int is_main_interp = _Py_IsMainInterpreter(tstate->interp);
+ _PyXI_Fini(tstate->interp);
_PyExc_ClearExceptionGroupType(tstate->interp);
_Py_clear_generic_types(tstate->interp);