mirror of
https://github.com/python/cpython.git
synced 2025-08-31 14:07:50 +00:00
Add _PyThreadState_UncheckedGet()
Issue #26154: Add a new private _PyThreadState_UncheckedGet() function which gets the current thread state, but don't call Py_FatalError() if it is NULL. Python 3.5.1 removed the _PyThreadState_Current symbol from the Python C API to no more expose complex and private atomic types. Atomic types depends on the compiler or can even depend on compiler options. The new function _PyThreadState_UncheckedGet() allows to get the variable value without having to care of the exact implementation of atomic types. Changes: * Replace direct usage of the _PyThreadState_Current variable with a call to _PyThreadState_UncheckedGet(). * In pystate.c, replace direct usage of the _PyThreadState_Current variable with the PyThreadState_GET() macro for readability. * Document also PyThreadState_Get() in pystate.h
This commit is contained in:
parent
aebb6d3682
commit
bfd316e750
7 changed files with 42 additions and 26 deletions
|
@ -1064,8 +1064,7 @@ PyDict_GetItem(PyObject *op, PyObject *key)
|
|||
Let's just hope that no exception occurs then... This must be
|
||||
_PyThreadState_Current and not PyThreadState_GET() because in debug
|
||||
mode, the latter complains if tstate is NULL. */
|
||||
tstate = (PyThreadState*)_Py_atomic_load_relaxed(
|
||||
&_PyThreadState_Current);
|
||||
tstate = _PyThreadState_UncheckedGet();
|
||||
if (tstate != NULL && tstate->curexc_type != NULL) {
|
||||
/* preserve the existing exception */
|
||||
PyObject *err_type, *err_value, *err_tb;
|
||||
|
@ -1102,8 +1101,7 @@ _PyDict_GetItem_KnownHash(PyObject *op, PyObject *key, Py_hash_t hash)
|
|||
Let's just hope that no exception occurs then... This must be
|
||||
_PyThreadState_Current and not PyThreadState_GET() because in debug
|
||||
mode, the latter complains if tstate is NULL. */
|
||||
tstate = (PyThreadState*)_Py_atomic_load_relaxed(
|
||||
&_PyThreadState_Current);
|
||||
tstate = _PyThreadState_UncheckedGet();
|
||||
if (tstate != NULL && tstate->curexc_type != NULL) {
|
||||
/* preserve the existing exception */
|
||||
PyObject *err_type, *err_value, *err_tb;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue