]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-128002: simplify `asyncio.all_tasks` to use `PyList_Extend` instead of manual...
authorKumar Aditya <kumaraditya@python.org>
Mon, 10 Feb 2025 08:56:32 +0000 (14:26 +0530)
committerGitHub <noreply@github.com>
Mon, 10 Feb 2025 08:56:32 +0000 (14:26 +0530)
Modules/_asynciomodule.c

index 656c03a98d73b20d45a19f588ceb9715f336b704..4070076d756fcf33564278f0dd0bac9fd67c35f4 100644 (file)
@@ -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) {