]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-97696: Use `PyObject_CallMethodNoArgs` and inline is_loop_running check in `_async...
authorItamar Ostricher <itamarost@gmail.com>
Sun, 7 May 2023 04:25:45 +0000 (21:25 -0700)
committerGitHub <noreply@github.com>
Sun, 7 May 2023 04:25:45 +0000 (09:55 +0530)
Modules/_asynciomodule.c

index 39c33fed74e2210a67e6dff44dd4d9532ff6c91d..3830245abe87b3a8982c23be55fdf24df89f4142 100644 (file)
@@ -2063,21 +2063,6 @@ swap_current_task(asyncio_state *state, PyObject *loop, PyObject *task)
     return prev_task;
 }
 
-static int
-is_loop_running(PyObject *loop)
-{
-    PyObject *func = PyObject_GetAttr(loop, &_Py_ID(is_running));
-    if (func == NULL) {
-        PyErr_Format(PyExc_TypeError, "Loop missing is_running()");
-        return -1;
-    }
-    PyObject *res = PyObject_CallNoArgs(func);
-    int retval = Py_IsTrue(res);
-    Py_DECREF(func);
-    Py_DECREF(res);
-    return !!retval;
-}
-
 /* ----- Task */
 
 /*[clinic input]
@@ -2148,11 +2133,13 @@ _asyncio_Task___init___impl(TaskObj *self, PyObject *coro, PyObject *loop,
     }
 
     if (eager_start) {
-        int loop_running = is_loop_running(self->task_loop);
-        if (loop_running == -1) {
+        PyObject *res = PyObject_CallMethodNoArgs(loop, &_Py_ID(is_running));
+        if (res == NULL) {
             return -1;
         }
-        if (loop_running) {
+        int is_loop_running = Py_IsTrue(res);
+        Py_DECREF(res);
+        if (is_loop_running) {
             if (task_eager_start(state, self)) {
                 return -1;
             }