https://github.com/python/cpython/commit/a2a4f5ebc5d5351324c9d3c870238d2a2fafdc64 commit: a2a4f5ebc5d5351324c9d3c870238d2a2fafdc64 branch: 3.13 author: Sam Gross <[email protected]> committer: kumaraditya303 <[email protected]> date: 2024-07-15T10:44:35+05:30 summary:
[3.13] gh-121621: Use PyMutex for writes to asyncio state (GH-121622) (#121774) (cherry picked from commit 5d6861ad06b524358f52603f242e7c0d57532a58) Co-authored-by: Ken Jin <[email protected]> Co-authored-by: Kumar Aditya <[email protected]> files: M Modules/_asynciomodule.c diff --git a/Modules/_asynciomodule.c b/Modules/_asynciomodule.c index 04b5fc505c074f..92d0e6de0dfb93 100644 --- a/Modules/_asynciomodule.c +++ b/Modules/_asynciomodule.c @@ -293,6 +293,8 @@ get_running_loop(asyncio_state *state, PyObject **loop) } } + // TODO GH-121621: This should be moved to PyThreadState + // for easier and quicker access. state->cached_running_loop = rl; state->cached_running_loop_tsid = ts_id; } @@ -336,6 +338,9 @@ set_running_loop(asyncio_state *state, PyObject *loop) return -1; } + + // TODO GH-121621: This should be moved to PyThreadState + // for easier and quicker access. state->cached_running_loop = loop; // borrowed, kept alive by ts_dict state->cached_running_loop_tsid = PyThreadState_GetID(tstate); @@ -1616,6 +1621,7 @@ FutureIter_dealloc(futureiterobject *it) state = get_asyncio_state(module); } + // TODO GH-121621: This should be moved to thread state as well. if (state && state->fi_freelist_len < FI_FREELIST_MAXLEN) { state->fi_freelist_len++; it->future = (FutureObj*) state->fi_freelist; @@ -2146,7 +2152,12 @@ _asyncio_Task___init___impl(TaskObj *self, PyObject *coro, PyObject *loop, // optimization: defer task name formatting // store the task counter as PyLong in the name // for deferred formatting in get_name - name = PyLong_FromUnsignedLongLong(++state->task_name_counter); +#ifdef Py_GIL_DISABLED + unsigned long long counter = _Py_atomic_add_uint64(&state->task_name_counter, 1) + 1; +#else + unsigned long long counter = ++state->task_name_counter; +#endif + name = PyLong_FromUnsignedLongLong(counter); } else if (!PyUnicode_CheckExact(name)) { name = PyObject_Str(name); } else { _______________________________________________ Python-checkins mailing list -- [email protected] To unsubscribe send an email to [email protected] https://mail.python.org/mailman3/lists/python-checkins.python.org/ Member address: [email protected]
