aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Include/internal/pycore_pystate.h
diff options
context:
space:
mode:
authorEric Snow <ericsnowcurrently@gmail.com>2024-11-21 11:08:38 -0700
committerGitHub <noreply@github.com>2024-11-21 11:08:38 -0700
commit9dabace39d118ec7a204b6970f8a3f475a11522c (patch)
treee03d07af2bcfcd399b993b1e0faf5dae67fc4e39 /Include/internal/pycore_pystate.h
parentbf542f8bb9f12f0df9481f2222b21545806dd9e1 (diff)
downloadcpython-9dabace39d118ec7a204b6970f8a3f475a11522c.tar.gz
cpython-9dabace39d118ec7a204b6970f8a3f475a11522c.zip
gh-114940: Add _Py_FOR_EACH_TSTATE_UNLOCKED(), and Friends (gh-127077)
This is a precursor to the actual fix for gh-114940, where we will change these macros to use the new lock. This change is almost entirely mechanical; the exceptions are the loops in codeobject.c and ceval.c, which now hold the "head" lock. Note that almost all of the uses of _Py_FOR_EACH_TSTATE_UNLOCKED() here will change to _Py_FOR_EACH_TSTATE_BEGIN() once we add the new per-interpreter lock.
Diffstat (limited to 'Include/internal/pycore_pystate.h')
-rw-r--r--Include/internal/pycore_pystate.h9
1 files changed, 9 insertions, 0 deletions
diff --git a/Include/internal/pycore_pystate.h b/Include/internal/pycore_pystate.h
index f4fbf3734e2..54d8803bc0b 100644
--- a/Include/internal/pycore_pystate.h
+++ b/Include/internal/pycore_pystate.h
@@ -269,6 +269,15 @@ extern int _PyOS_InterruptOccurred(PyThreadState *tstate);
#define HEAD_UNLOCK(runtime) \
PyMutex_Unlock(&(runtime)->interpreters.mutex)
+#define _Py_FOR_EACH_TSTATE_UNLOCKED(interp, t) \
+ for (PyThreadState *t = interp->threads.head; t; t = t->next)
+#define _Py_FOR_EACH_TSTATE_BEGIN(interp, t) \
+ HEAD_LOCK(interp->runtime); \
+ _Py_FOR_EACH_TSTATE_UNLOCKED(interp, t)
+#define _Py_FOR_EACH_TSTATE_END(interp) \
+ HEAD_UNLOCK(interp->runtime)
+
+
// Get the configuration of the current interpreter.
// The caller must hold the GIL.
// Export for test_peg_generator.