mirror of https://github.com/python/cpython
[3.13] gh-121621: Move asyncio_running_loop to private struct (GH-121939) (#121943)
gh-121621: Move asyncio_running_loop to private struct (GH-121939)
This avoids changing the ABI and keeps the field in the private struct.
(cherry picked from commit 81fd625b5c
)
Co-authored-by: Sam Gross <colesbury@gmail.com>
This commit is contained in:
parent
a12c105908
commit
afa5321c6c
|
@ -68,8 +68,6 @@ struct _ts {
|
|||
pycore_ceval.h. */
|
||||
uintptr_t eval_breaker;
|
||||
|
||||
PyObject *asyncio_running_loop; // Strong reference
|
||||
|
||||
struct {
|
||||
/* Has been initialized to a safe state.
|
||||
|
||||
|
|
|
@ -21,6 +21,8 @@ typedef struct _PyThreadStateImpl {
|
|||
// semi-public fields are in PyThreadState.
|
||||
PyThreadState base;
|
||||
|
||||
PyObject *asyncio_running_loop; // Strong reference
|
||||
|
||||
struct _qsbr_thread_state *qsbr; // only used by free-threaded build
|
||||
struct llist_node mem_free_queue; // delayed free queue
|
||||
|
||||
|
|
|
@ -265,7 +265,7 @@ get_event_loop(asyncio_state *state)
|
|||
PyObject *loop;
|
||||
PyObject *policy;
|
||||
|
||||
PyThreadState *ts = _PyThreadState_GET();
|
||||
_PyThreadStateImpl *ts = (_PyThreadStateImpl *)_PyThreadState_GET();
|
||||
loop = Py_XNewRef(ts->asyncio_running_loop);
|
||||
|
||||
if (loop != NULL) {
|
||||
|
@ -3189,7 +3189,7 @@ static PyObject *
|
|||
_asyncio__get_running_loop_impl(PyObject *module)
|
||||
/*[clinic end generated code: output=b4390af721411a0a input=0a21627e25a4bd43]*/
|
||||
{
|
||||
PyThreadState *ts = _PyThreadState_GET();
|
||||
_PyThreadStateImpl *ts = (_PyThreadStateImpl *)_PyThreadState_GET();
|
||||
PyObject *loop = Py_XNewRef(ts->asyncio_running_loop);
|
||||
if (loop == NULL) {
|
||||
/* There's no currently running event loop */
|
||||
|
@ -3213,7 +3213,7 @@ static PyObject *
|
|||
_asyncio__set_running_loop(PyObject *module, PyObject *loop)
|
||||
/*[clinic end generated code: output=ae56bf7a28ca189a input=4c9720233d606604]*/
|
||||
{
|
||||
PyThreadState *ts = _PyThreadState_GET();
|
||||
_PyThreadStateImpl *ts = (_PyThreadStateImpl *)_PyThreadState_GET();
|
||||
if (loop == Py_None) {
|
||||
loop = NULL;
|
||||
}
|
||||
|
@ -3255,7 +3255,7 @@ _asyncio_get_running_loop_impl(PyObject *module)
|
|||
/*[clinic end generated code: output=c247b5f9e529530e input=2a3bf02ba39f173d]*/
|
||||
{
|
||||
PyObject *loop;
|
||||
PyThreadState *ts = _PyThreadState_GET();
|
||||
_PyThreadStateImpl *ts = (_PyThreadStateImpl *)_PyThreadState_GET();
|
||||
loop = Py_XNewRef(ts->asyncio_running_loop);
|
||||
if (loop == NULL) {
|
||||
/* There's no currently running event loop */
|
||||
|
|
|
@ -1499,7 +1499,7 @@ init_threadstate(_PyThreadStateImpl *_tstate,
|
|||
tstate->previous_executor = NULL;
|
||||
tstate->dict_global_version = 0;
|
||||
|
||||
tstate->asyncio_running_loop = NULL;
|
||||
_tstate->asyncio_running_loop = NULL;
|
||||
|
||||
tstate->delete_later = NULL;
|
||||
|
||||
|
@ -1702,7 +1702,7 @@ PyThreadState_Clear(PyThreadState *tstate)
|
|||
|
||||
/* Don't clear tstate->pyframe: it is a borrowed reference */
|
||||
|
||||
Py_CLEAR(tstate->asyncio_running_loop);
|
||||
Py_CLEAR(((_PyThreadStateImpl *)tstate)->asyncio_running_loop);
|
||||
|
||||
Py_CLEAR(tstate->dict);
|
||||
Py_CLEAR(tstate->async_exc);
|
||||
|
|
Loading…
Reference in New Issue