]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-43268: Replace _PyThreadState_GET() with _PyInterpreterState_GET() (GH-24576)
authorVictor Stinner <vstinner@python.org>
Fri, 19 Feb 2021 12:21:28 +0000 (13:21 +0100)
committerGitHub <noreply@github.com>
Fri, 19 Feb 2021 12:21:28 +0000 (13:21 +0100)
Replace _PyThreadState_GET() with _PyInterpreterState_GET() in
functions which only need the current interpreter, but don't need the
current Python thread state.

Replace also _PyThreadState_UncheckedGet() with _PyThreadState_GET()
in faulthandler.c, since _PyThreadState_UncheckedGet() is just an
alias to _PyThreadState_GET() in practice.

Include/internal/pycore_long.h
Include/internal/pycore_object.h
Modules/faulthandler.c

index ec95786531c85088198a18617a6733ccff6bb8ee..a785b23a92b8c12b84eb2595d14a2d7ca0036aa8 100644 (file)
@@ -14,13 +14,10 @@ extern "C" {
 // Don't call this function but _PyLong_GetZero() and _PyLong_GetOne()
 static inline PyObject* __PyLong_GetSmallInt_internal(int value)
 {
-    PyThreadState *tstate = _PyThreadState_GET();
-#ifdef Py_DEBUG
-    _Py_EnsureTstateNotNULL(tstate);
-#endif
+    PyInterpreterState *interp = _PyInterpreterState_GET();
     assert(-_PY_NSMALLNEGINTS <= value && value < _PY_NSMALLPOSINTS);
     size_t index = _PY_NSMALLNEGINTS + value;
-    PyObject *obj = (PyObject*)tstate->interp->small_ints[index];
+    PyObject *obj = (PyObject*)interp->small_ints[index];
     // _PyLong_GetZero() and _PyLong_GetOne() must not be called
     // before _PyLong_Init() nor after _PyLong_Fini()
     assert(obj != NULL);
index 3cd27b035c2c78a08d78d7ba5c80143e50c7f6d6..79c1c44ae72d60410d9a7cb5443cbbf72aaeeeea 100644 (file)
@@ -8,9 +8,9 @@ extern "C" {
 #  error "this header requires Py_BUILD_CORE define"
 #endif
 
-#include "pycore_gc.h"         // _PyObject_GC_IS_TRACKED()
-#include "pycore_interp.h"     // PyInterpreterState.gc
-#include "pycore_pystate.h"    // _PyThreadState_GET()
+#include "pycore_gc.h"            // _PyObject_GC_IS_TRACKED()
+#include "pycore_interp.h"        // PyInterpreterState.gc
+#include "pycore_pystate.h"       // _PyInterpreterState_GET()
 
 PyAPI_FUNC(int) _PyType_CheckConsistency(PyTypeObject *type);
 PyAPI_FUNC(int) _PyDict_CheckConsistency(PyObject *mp, int check_content);
@@ -85,8 +85,8 @@ static inline void _PyObject_GC_TRACK(
                           "object is in generation which is garbage collected",
                           filename, lineno, __func__);
 
-    PyThreadState *tstate = _PyThreadState_GET();
-    PyGC_Head *generation0 = tstate->interp->gc.generation0;
+    PyInterpreterState *interp = _PyInterpreterState_GET();
+    PyGC_Head *generation0 = interp->gc.generation0;
     PyGC_Head *last = (PyGC_Head*)(generation0->_gc_prev);
     _PyGCHead_SET_NEXT(last, gc);
     _PyGCHead_SET_PREV(gc, last);
index da8b7741345de05c27e3f494dc7730988acf517c..350f4cf6b8edffe99883ae93cdc1b2ca4debe0ba 100644 (file)
@@ -1,6 +1,7 @@
 #include "Python.h"
 #include "pycore_initconfig.h"    // _PyStatus_ERR
 #include "pycore_pyerrors.h"      // _Py_DumpExtensionModules
+#include "pycore_pystate.h"       // _PyThreadState_GET()
 #include "pycore_traceback.h"     // _Py_DumpTracebackThreads
 #include <signal.h>
 #include <object.h>
@@ -208,7 +209,7 @@ faulthandler_get_fileno(PyObject **file_ptr)
 static PyThreadState*
 get_thread_state(void)
 {
-    PyThreadState *tstate = _PyThreadState_UncheckedGet();
+    PyThreadState *tstate = _PyThreadState_GET();
     if (tstate == NULL) {
         /* just in case but very unlikely... */
         PyErr_SetString(PyExc_RuntimeError,