]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-113848: Use PyErr_GivenExceptionMatches() for check for CancelledError (GH-113849)
authorSerhiy Storchaka <storchaka@gmail.com>
Tue, 9 Jan 2024 19:41:02 +0000 (21:41 +0200)
committerGitHub <noreply@github.com>
Tue, 9 Jan 2024 19:41:02 +0000 (21:41 +0200)
Modules/_asynciomodule.c

index 3a11cdc926f13805d2be013c9b3f6738ab549146..b929e6d9922b4ee8d3da279525583fd33b85b3ba 100644 (file)
@@ -2754,7 +2754,6 @@ gen_status_from_result(PyObject **result)
 static PyObject *
 task_step_impl(asyncio_state *state, TaskObj *task, PyObject *exc)
 {
-    int res;
     int clear_exc = 0;
     PyObject *result = NULL;
     PyObject *coro;
@@ -2771,20 +2770,7 @@ task_step_impl(asyncio_state *state, TaskObj *task, PyObject *exc)
     if (task->task_must_cancel) {
         assert(exc != Py_None);
 
-        if (exc) {
-            /* Check if exc is a CancelledError */
-            res = PyObject_IsInstance(exc, state->asyncio_CancelledError);
-            if (res == -1) {
-                /* An error occurred, abort */
-                goto fail;
-            }
-            if (res == 0) {
-                /* exc is not CancelledError; reset it to NULL */
-                exc = NULL;
-            }
-        }
-
-        if (!exc) {
+        if (!exc || !PyErr_GivenExceptionMatches(exc, state->asyncio_CancelledError)) {
             /* exc was not a CancelledError */
             exc = create_cancelled_error(state, (FutureObj*)task);