diff options
author | Eric Snow <ericsnowcurrently@gmail.com> | 2023-10-02 20:12:12 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-10-02 20:12:12 (GMT) |
commit | 1dd9dee45d2591b4e701039d1673282380696849 (patch) | |
tree | 14199e2d03ef74ca575d64552676d4797d792d9c /Include | |
parent | a040a32ea2f13f16172394d3e3e3f80f47f25a68 (diff) | |
download | cpython-1dd9dee45d2591b4e701039d1673282380696849.zip cpython-1dd9dee45d2591b4e701039d1673282380696849.tar.gz cpython-1dd9dee45d2591b4e701039d1673282380696849.tar.bz2 |
gh-105716: Support Background Threads in Subinterpreters Consistently (gh-109921)
The existence of background threads running on a subinterpreter was preventing interpreters from getting properly destroyed, as well as impacting the ability to run the interpreter again. It also affected how we wait for non-daemon threads to finish.
We add PyInterpreterState.threads.main, with some internal C-API functions.
Diffstat (limited to 'Include')
-rw-r--r-- | Include/cpython/pystate.h | 1 | ||||
-rw-r--r-- | Include/internal/pycore_interp.h | 2 | ||||
-rw-r--r-- | Include/internal/pycore_pystate.h | 5 |
3 files changed, 8 insertions, 0 deletions
diff --git a/Include/cpython/pystate.h b/Include/cpython/pystate.h index 5e184d0..7e4c57e 100644 --- a/Include/cpython/pystate.h +++ b/Include/cpython/pystate.h @@ -211,6 +211,7 @@ struct _ts { * if it is NULL. */ PyAPI_FUNC(PyThreadState *) _PyThreadState_UncheckedGet(void); + // Disable tracing and profiling. PyAPI_FUNC(void) PyThreadState_EnterTracing(PyThreadState *tstate); diff --git a/Include/internal/pycore_interp.h b/Include/internal/pycore_interp.h index 0912bd1..ebf0228 100644 --- a/Include/internal/pycore_interp.h +++ b/Include/internal/pycore_interp.h @@ -73,6 +73,8 @@ struct _is { uint64_t next_unique_id; /* The linked list of threads, newest first. */ PyThreadState *head; + /* The thread currently executing in the __main__ module, if any. */ + PyThreadState *main; /* Used in Modules/_threadmodule.c. */ long count; /* Support for runtime thread stack size tuning. diff --git a/Include/internal/pycore_pystate.h b/Include/internal/pycore_pystate.h index 2e568f8..6a36dba 100644 --- a/Include/internal/pycore_pystate.h +++ b/Include/internal/pycore_pystate.h @@ -44,6 +44,11 @@ _Py_IsMainInterpreterFinalizing(PyInterpreterState *interp) interp == &_PyRuntime._main_interpreter); } +// Export for _xxsubinterpreters module. +PyAPI_FUNC(int) _PyInterpreterState_SetRunningMain(PyInterpreterState *); +PyAPI_FUNC(void) _PyInterpreterState_SetNotRunningMain(PyInterpreterState *); +PyAPI_FUNC(int) _PyInterpreterState_IsRunningMain(PyInterpreterState *); + static inline const PyConfig * _Py_GetMainConfig(void) |