https://github.com/python/cpython/commit/7246b9124c8fd5bc722a14938343fbe1fff47f02
commit: 7246b9124c8fd5bc722a14938343fbe1fff47f02
branch: main
author: Kumar Aditya <[email protected]>
committer: kumaraditya303 <[email protected]>
date: 2025-02-10T14:26:32+05:30
summary:
gh-128002: simplify `asyncio.all_tasks` to use `PyList_Extend` instead of
manual iteration (#129942)
files:
M Modules/_asynciomodule.c
diff --git a/Modules/_asynciomodule.c b/Modules/_asynciomodule.c
index 656c03a98d73b2..4070076d756fcf 100644
--- a/Modules/_asynciomodule.c
+++ b/Modules/_asynciomodule.c
@@ -4102,6 +4102,12 @@ _asyncio_all_tasks_impl(PyObject *module, PyObject *loop)
Py_DECREF(loop);
return NULL;
}
+ if (PyList_Extend(tasks, state->non_asyncio_tasks) < 0) {
+ Py_DECREF(tasks);
+ Py_DECREF(loop);
+ return NULL;
+ }
+
PyInterpreterState *interp = PyInterpreterState_Get();
// Stop the world and traverse the per-thread linked list
// of asyncio tasks for every thread, as well as the
@@ -4127,24 +4133,7 @@ _asyncio_all_tasks_impl(PyObject *module, PyObject *loop)
Py_DECREF(loop);
return NULL;
}
- PyObject *scheduled_iter = PyObject_GetIter(state->non_asyncio_tasks);
- if (scheduled_iter == NULL) {
- Py_DECREF(tasks);
- Py_DECREF(loop);
- return NULL;
- }
- PyObject *item;
- while ((item = PyIter_Next(scheduled_iter)) != NULL) {
- if (PyList_Append(tasks, item) < 0) {
- Py_DECREF(tasks);
- Py_DECREF(loop);
- Py_DECREF(item);
- Py_DECREF(scheduled_iter);
- return NULL;
- }
- Py_DECREF(item);
- }
- Py_DECREF(scheduled_iter);
+
// All the tasks are now in the list, now filter the tasks which are done
PyObject *res = PySet_New(NULL);
if (res == NULL) {
_______________________________________________
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]