Skip to content

Commit c8048fb

Browse files
work
1 parent ed16bbe commit c8048fb

File tree

2 files changed

+18
-8
lines changed

2 files changed

+18
-8
lines changed

Lib/asyncio/tasks.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1110,7 +1110,7 @@ def _unregister_eager_task(task):
11101110
from _asyncio import (_register_task, _register_eager_task,
11111111
_unregister_task, _unregister_eager_task,
11121112
_enter_task, _leave_task, _swap_current_task,
1113-
_scheduled_tasks, _eager_tasks, _current_tasks,
1113+
_scheduled_tasks, _eager_tasks,
11141114
current_task, all_tasks)
11151115
except ImportError:
11161116
pass

Modules/_asynciomodule.c

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2258,7 +2258,14 @@ swap_current_task(PyObject *loop, PyObject *task)
22582258
{
22592259
_PyThreadStateImpl *ts = (_PyThreadStateImpl *)_PyThreadState_GET();
22602260
PyObject *prev_task = ts->asyncio_running_task;
2261-
ts->asyncio_running_task = Py_NewRef(task);
2261+
if (task != Py_None) {
2262+
ts->asyncio_running_task = Py_NewRef(task);
2263+
} else {
2264+
Py_CLEAR(ts->asyncio_running_task);
2265+
}
2266+
if (prev_task == NULL) {
2267+
Py_RETURN_NONE;
2268+
}
22622269
return prev_task;
22632270
}
22642271

@@ -3846,8 +3853,6 @@ static PyObject *
38463853
_asyncio_current_task_impl(PyObject *module, PyObject *loop)
38473854
/*[clinic end generated code: output=fe15ac331a7f981a input=58910f61a5627112]*/
38483855
{
3849-
PyObject *ret;
3850-
38513856
if (loop == Py_None) {
38523857
loop = _asyncio_get_running_loop_impl(module);
38533858
if (loop == NULL) {
@@ -3860,19 +3865,24 @@ _asyncio_current_task_impl(PyObject *module, PyObject *loop)
38603865
_PyThreadStateImpl *ts = (_PyThreadStateImpl *)_PyThreadState_GET();
38613866

38623867
if (ts->asyncio_running_loop == loop) {
3863-
ret = Py_XNewRef(ts->asyncio_running_task);
3868+
if (ts->asyncio_running_task != NULL) {
3869+
Py_DECREF(loop);
3870+
return Py_NewRef(ts->asyncio_running_task);
3871+
}
38643872
Py_DECREF(loop);
3865-
return ret;
3873+
Py_RETURN_NONE;
38663874
}
38673875

3868-
ret = Py_None;
3876+
PyObject *ret = Py_None;
38693877

38703878
PyInterpreterState *interp = ts->base.interp;
38713879
_PyEval_StopTheWorld(interp);
38723880
_Py_FOR_EACH_TSTATE_BEGIN(interp, p) {
38733881
ts = (_PyThreadStateImpl *)p;
38743882
if (ts->asyncio_running_loop == loop) {
3875-
ret = Py_XNewRef(ts->asyncio_running_task);
3883+
if (ts->asyncio_running_task != NULL) {
3884+
ret = Py_NewRef(ts->asyncio_running_task);
3885+
}
38763886
goto exit;
38773887
}
38783888
}

0 commit comments

Comments
 (0)