8000 gh-128002: add fast path for native tasks in `asyncio.all_tasks` (#12… · python/cpython@bff4bfe · GitHub
[go: up one dir, main page]

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

Lines changed: 13 additions & 0 deletions
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)
0