summaryrefslogtreecommitdiffstats
path: root/Include
diff options
context:
space:
mode:
authorEric Snow <ericsnowcurrently@gmail.com>2023-10-02 20:12:12 (GMT)
committerGitHub <noreply@github.com>2023-10-02 20:12:12 (GMT)
commit1dd9dee45d2591b4e701039d1673282380696849 (patch)
tree14199e2d03ef74ca575d64552676d4797d792d9c /Include
parenta040a32ea2f13f16172394d3e3e3f80f47f25a68 (diff)
downloadcpython-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.h1
-rw-r--r--Include/internal/pycore_interp.h2
-rw-r--r--Include/internal/pycore_pystate.h5
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)