summaryrefslogtreecommitdiffstats
path: root/Modules/_asynciomodule.c
diff options
context:
space:
mode:
Diffstat (limited to 'Modules/_asynciomodule.c')
-rw-r--r--Modules/_asynciomodule.c71
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;