Skip to content

Commit

Permalink
[3.13] pythongh-121621: Move asyncio_running_loop to private struct (p…
Browse files Browse the repository at this point in the history
…ythonGH-121939) (python#121943)

pythongh-121621: Move asyncio_running_loop to private struct (pythonGH-121939)

This avoids changing the ABI and keeps the field in the private struct.
(cherry picked from commit 81fd625)

Co-authored-by: Sam Gross <colesbury@gmail.com>
  • Loading branch information
miss-islington and colesbury authored Jul 18, 2024
1 parent a12c105 commit afa5321
Show file tree
Hide file tree
Showing 4 changed files with 8 additions and 8 deletions.
2 changes: 0 additions & 2 deletions Include/cpython/pystate.h
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
2 changes: 2 additions & 0 deletions Include/internal/pycore_tstate.h
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
8 changes: 4 additions & 4 deletions Modules/_asynciomodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down Expand Up @@ -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 */
Expand All @@ -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;
}
Expand Down Expand Up @@ -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 */
Expand Down
4 changes: 2 additions & 2 deletions Python/pystate.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit afa5321

Please sign in to comment.