bpo-39947: Add PyThreadState_GetID() function (GH-19163)
Add PyThreadState_GetID() function: get the unique identifier of a Python thread state.
This commit is contained in:
parent
0e427c6d15
commit
5c3cda0d1a
|
@ -1084,6 +1084,15 @@ All of the following functions must be called after :c:func:`Py_Initialize`.
|
||||||
.. versionadded:: 3.9
|
.. versionadded:: 3.9
|
||||||
|
|
||||||
|
|
||||||
|
.. c:function:: uint64_t PyThreadState_GetID(PyThreadState *tstate)
|
||||||
|
|
||||||
|
Get the unique thread state identifier of the Python thread state *tstate*.
|
||||||
|
|
||||||
|
*tstate* must not be ``NULL``.
|
||||||
|
|
||||||
|
.. versionadded:: 3.9
|
||||||
|
|
||||||
|
|
||||||
.. c:function:: PyInterpreterState* PyThreadState_GetInterpreter(PyThreadState *tstate)
|
.. c:function:: PyInterpreterState* PyThreadState_GetInterpreter(PyThreadState *tstate)
|
||||||
|
|
||||||
Get the interpreter of the Python thread state *tstate*.
|
Get the interpreter of the Python thread state *tstate*.
|
||||||
|
|
|
@ -429,6 +429,8 @@ Build and C API Changes
|
||||||
:c:func:`PyInterpreterState_Get` functions to get the interpreter.
|
:c:func:`PyInterpreterState_Get` functions to get the interpreter.
|
||||||
New :c:func:`PyThreadState_GetFrame` function to get the current frame of a
|
New :c:func:`PyThreadState_GetFrame` function to get the current frame of a
|
||||||
Python thread state.
|
Python thread state.
|
||||||
|
New :c:func:`PyThreadState_GetID` function: get the unique identifier of a
|
||||||
|
Python thread state.
|
||||||
(Contributed by Victor Stinner in :issue:`39947`.)
|
(Contributed by Victor Stinner in :issue:`39947`.)
|
||||||
|
|
||||||
* Add ``--with-platlibdir`` option to the ``configure`` script: name of the
|
* Add ``--with-platlibdir`` option to the ``configure`` script: name of the
|
||||||
|
|
|
@ -91,6 +91,7 @@ PyAPI_FUNC(int) PyThreadState_SetAsyncExc(unsigned long, PyObject *);
|
||||||
/* New in 3.9 */
|
/* New in 3.9 */
|
||||||
PyAPI_FUNC(PyInterpreterState*) PyThreadState_GetInterpreter(PyThreadState *tstate);
|
PyAPI_FUNC(PyInterpreterState*) PyThreadState_GetInterpreter(PyThreadState *tstate);
|
||||||
PyAPI_FUNC(struct _frame*) PyThreadState_GetFrame(PyThreadState *tstate);
|
PyAPI_FUNC(struct _frame*) PyThreadState_GetFrame(PyThreadState *tstate);
|
||||||
|
PyAPI_FUNC(uint64_t) PyThreadState_GetID(PyThreadState *tstate);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef
|
typedef
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
Add :c:func:`PyThreadState_GetID` function: get the unique identifier of a
|
||||||
|
Python thread state.
|
|
@ -231,7 +231,8 @@ get_running_loop(PyObject **loop)
|
||||||
PyObject *rl;
|
PyObject *rl;
|
||||||
|
|
||||||
PyThreadState *ts = PyThreadState_Get();
|
PyThreadState *ts = PyThreadState_Get();
|
||||||
if (ts->id == cached_running_holder_tsid && cached_running_holder != NULL) {
|
uint64_t ts_id = PyThreadState_GetID(ts);
|
||||||
|
if (ts_id == cached_running_holder_tsid && cached_running_holder != NULL) {
|
||||||
// Fast path, check the cache.
|
// Fast path, check the cache.
|
||||||
rl = cached_running_holder; // borrowed
|
rl = cached_running_holder; // borrowed
|
||||||
}
|
}
|
||||||
|
@ -253,7 +254,7 @@ get_running_loop(PyObject **loop)
|
||||||
}
|
}
|
||||||
|
|
||||||
cached_running_holder = rl; // borrowed
|
cached_running_holder = rl; // borrowed
|
||||||
cached_running_holder_tsid = ts->id;
|
cached_running_holder_tsid = ts_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(Py_IS_TYPE(rl, &PyRunningLoopHolder_Type));
|
assert(Py_IS_TYPE(rl, &PyRunningLoopHolder_Type));
|
||||||
|
|
|
@ -1021,6 +1021,14 @@ PyThreadState_GetFrame(PyThreadState *tstate)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uint64_t
|
||||||
|
PyThreadState_GetID(PyThreadState *tstate)
|
||||||
|
{
|
||||||
|
assert(tstate != NULL);
|
||||||
|
return tstate->id;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Asynchronously raise an exception in a thread.
|
/* Asynchronously raise an exception in a thread.
|
||||||
Requested by Just van Rossum and Alex Martelli.
|
Requested by Just van Rossum and Alex Martelli.
|
||||||
To prevent naive misuse, you must write your own extension
|
To prevent naive misuse, you must write your own extension
|
||||||
|
|
Loading…
Reference in New Issue