Use PyThreadState_GET() in performance critical code
It seems like _PyThreadState_UncheckedGet() is not inlined as expected, even when using gcc -O3.
This commit is contained in:
parent
7255edd3df
commit
0cae609847
|
@ -1409,7 +1409,7 @@ PyDict_GetItem(PyObject *op, PyObject *key)
|
||||||
Let's just hope that no exception occurs then... This must be
|
Let's just hope that no exception occurs then... This must be
|
||||||
_PyThreadState_Current and not PyThreadState_GET() because in debug
|
_PyThreadState_Current and not PyThreadState_GET() because in debug
|
||||||
mode, the latter complains if tstate is NULL. */
|
mode, the latter complains if tstate is NULL. */
|
||||||
tstate = _PyThreadState_UncheckedGet();
|
tstate = PyThreadState_GET();
|
||||||
if (tstate != NULL && tstate->curexc_type != NULL) {
|
if (tstate != NULL && tstate->curexc_type != NULL) {
|
||||||
/* preserve the existing exception */
|
/* preserve the existing exception */
|
||||||
PyObject *err_type, *err_value, *err_tb;
|
PyObject *err_type, *err_value, *err_tb;
|
||||||
|
|
|
@ -161,7 +161,7 @@ PyErr_SetString(PyObject *exception, const char *string)
|
||||||
PyObject *
|
PyObject *
|
||||||
PyErr_Occurred(void)
|
PyErr_Occurred(void)
|
||||||
{
|
{
|
||||||
PyThreadState *tstate = _PyThreadState_UncheckedGet();
|
PyThreadState *tstate = PyThreadState_GET();
|
||||||
return tstate == NULL ? NULL : tstate->curexc_type;
|
return tstate == NULL ? NULL : tstate->curexc_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1547,8 +1547,9 @@ error:
|
||||||
Py_XDECREF(name);
|
Py_XDECREF(name);
|
||||||
Py_XDECREF(value);
|
Py_XDECREF(value);
|
||||||
/* No return value, therefore clear error state if possible */
|
/* No return value, therefore clear error state if possible */
|
||||||
if (_PyThreadState_UncheckedGet())
|
if (_PyThreadState_UncheckedGet()) {
|
||||||
PyErr_Clear();
|
PyErr_Clear();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PyObject *
|
PyObject *
|
||||||
|
|
Loading…
Reference in New Issue