diff options
Diffstat (limited to 'Modules/_asynciomodule.c')
-rw-r--r-- | Modules/_asynciomodule.c | 71 |
1 files changed, 7 insertions, 64 deletions
diff --git a/Modules/_asynciomodule.c b/Modules/_asynciomodule.c index eae468d..cb7afec 100644 --- a/Modules/_asynciomodule.c +++ b/Modules/_asynciomodule.c @@ -23,7 +23,6 @@ _Py_IDENTIFIER(call_soon); _Py_IDENTIFIER(cancel); _Py_IDENTIFIER(get_event_loop); _Py_IDENTIFIER(throw); -_Py_IDENTIFIER(_check_future); /* State of the _asyncio module */ @@ -1810,8 +1809,6 @@ class _asyncio.Task "TaskObj *" "&Task_Type" static int task_call_step_soon(TaskObj *, PyObject *); static PyObject * task_wakeup(TaskObj *, PyObject *); static PyObject * task_step(TaskObj *, PyObject *); -static int task_check_future(TaskObj *, PyObject *); -static int task_check_future_exact(TaskObj *, PyObject *); /* ----- Task._step wrapper */ @@ -2286,6 +2283,7 @@ Returns the remaining number of cancellation requests. static PyObject * _asyncio_Task_uncancel_impl(TaskObj *self) /*[clinic end generated code: output=58184d236a817d3c input=68f81a4b90b46be2]*/ +/*[clinic end generated code]*/ { if (self->task_num_cancels_requested > 0) { self->task_num_cancels_requested -= 1; @@ -2294,21 +2292,6 @@ _asyncio_Task_uncancel_impl(TaskObj *self) } /*[clinic input] -_asyncio.Task._check_future -> bool - - future: object - -Return False if task and future loops are not compatible. -[clinic start generated code]*/ - -static int -_asyncio_Task__check_future_impl(TaskObj *self, PyObject *future) -/*[clinic end generated code: output=a3bfba79295c8d57 input=3b1d6dfd6fe90aa5]*/ -{ - return task_check_future_exact(self, future); -} - -/*[clinic input] _asyncio.Task.get_stack * @@ -2533,7 +2516,6 @@ static PyMethodDef TaskType_methods[] = { _ASYNCIO_TASK_CANCEL_METHODDEF _ASYNCIO_TASK_CANCELLING_METHODDEF _ASYNCIO_TASK_UNCANCEL_METHODDEF - _ASYNCIO_TASK__CHECK_FUTURE_METHODDEF _ASYNCIO_TASK_GET_STACK_METHODDEF _ASYNCIO_TASK_PRINT_STACK_METHODDEF _ASYNCIO_TASK__MAKE_CANCELLED_ERROR_METHODDEF @@ -2602,43 +2584,6 @@ TaskObj_dealloc(PyObject *self) } static int -task_check_future_exact(TaskObj *task, PyObject *future) -{ - int res; - if (Future_CheckExact(future) || Task_CheckExact(future)) { - FutureObj *fut = (FutureObj *)future; - res = (fut->fut_loop == task->task_loop); - } else { - PyObject *oloop = get_future_loop(future); - if (oloop == NULL) { - return -1; - } - res = (oloop == task->task_loop); - Py_DECREF(oloop); - } - return res; -} - - -static int -task_check_future(TaskObj *task, PyObject *future) -{ - if (Task_CheckExact(task)) { - return task_check_future_exact(task, future); - } else { - PyObject * ret = _PyObject_CallMethodIdOneArg((PyObject *)task, - &PyId__check_future, - future); - if (ret == NULL) { - return -1; - } - int is_true = PyObject_IsTrue(ret); - Py_DECREF(ret); - return is_true; - } -} - -static int task_call_step_soon(TaskObj *task, PyObject *arg) { PyObject *cb = TaskStepMethWrapper_new(task, arg); @@ -2859,11 +2804,7 @@ task_step_impl(TaskObj *task, PyObject *exc) FutureObj *fut = (FutureObj*)result; /* Check if `result` future is attached to a different loop */ - res = task_check_future(task, result); - if (res == -1) { - goto fail; - } - if (res == 0) { + if (fut->fut_loop != task->task_loop) { goto different_loop; } @@ -2935,13 +2876,15 @@ task_step_impl(TaskObj *task, PyObject *exc) } /* Check if `result` future is attached to a different loop */ - res = task_check_future(task, result); - if (res == -1) { + PyObject *oloop = get_future_loop(result); + if (oloop == NULL) { goto fail; } - if (res == 0) { + if (oloop != task->task_loop) { + Py_DECREF(oloop); goto different_loop; } + Py_DECREF(oloop); if (!blocking) { goto yield_insteadof_yf; |