gh-108867: Add PyThreadState_GetUnchecked() function by vstinner · Pull Request #108870 · python/cpython (original) (raw)
I was worried about Py_TRASHCAN_BEGIN_CONDITION()
macro which currently calls _PyThreadState_UncheckedGet()
. This macro uses private functions:
/* Python 3.9 private API, invoked by the macros below. */ PyAPI_FUNC(int) _PyTrash_begin(PyThreadState *tstate, PyObject *op); PyAPI_FUNC(void) _PyTrash_end(PyThreadState *tstate);
/* Python 3.10 private API, invoked by the Py_TRASHCAN_BEGIN(). */ PyAPI_FUNC(int) _PyTrash_cond(PyObject *op, destructor dealloc);
I was worried that we still provide Python 3.9 functions. Is it the a stable ABI? Nope, these functions are not part of Misc/stable_abi.toml
.
Moreover, I explicitly removed the following macros from the limited C API in Python 3.9:
PyTrash_UNWIND_LEVEL
Py_TRASHCAN_BEGIN_CONDITION()
Py_TRASHCAN_BEGIN()
Py_TRASHCAN_END()
Py_TRASHCAN_SAFE_BEGIN()
Py_TRASHCAN_SAFE_END()
So in fact, we keep Python 3.9 functions for the ABI backward compatibility, whereas we do not support these APIs in the stable ABI.
In short, it's ok to rename _PyThreadState_UncheckedGet()
to PyThreadState_GetUnsafe()
, it's not used by the stable ABI.