Skip to content

Commit bff4bfe

Browse files
gh-128002: add fast path for native tasks in asyncio.all_tasks (#129943)
1 parent 7246b91 commit bff4bfe

File tree

1 file changed

+13
-0
lines changed

1 file changed

+13
-0
lines changed

Modules/_asynciomodule.c

+13
Original file line numberDiff line numberDiff line change
@@ -3991,6 +3991,19 @@ static inline int
39913991
add_one_task(asyncio_state *state, PyObject *tasks, PyObject *task, PyObject *loop)
39923992
{
39933993
assert(PySet_CheckExact(tasks));
3994+
if (Task_CheckExact(state, task)) {
3995+
int pending = 0;
3996+
Py_BEGIN_CRITICAL_SECTION(task);
3997+
pending = ((TaskObj *)task)->task_state == STATE_PENDING && ((TaskObj *)task)->task_loop == loop;
3998+
Py_END_CRITICAL_SECTION();
3999+
if (pending) {
4000+
if (PySet_Add(tasks, task) < 0) {
4001+
return -1;
4002+
}
4003+
}
4004+
return 0;
4005+
}
4006+
39944007
PyObject *done = PyObject_CallMethodNoArgs(task, &_Py_ID(done));
39954008
if (done == NULL) {
39964009
return -1;

0 commit comments

Comments
 (0)