]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-45711: Remove unnecessary normalization of exc_info (GH-29922)
authorIrit Katriel <1055913+iritkatriel@users.noreply.github.com>
Wed, 8 Dec 2021 20:08:06 +0000 (20:08 +0000)
committerGitHub <noreply@github.com>
Wed, 8 Dec 2021 20:08:06 +0000 (20:08 +0000)
Misc/NEWS.d/next/Core and Builtins/2021-12-05-17-36-08.bpo-45711.3TmTSw.rst [new file with mode: 0644]
Python/errors.c

diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-12-05-17-36-08.bpo-45711.3TmTSw.rst b/Misc/NEWS.d/next/Core and Builtins/2021-12-05-17-36-08.bpo-45711.3TmTSw.rst
new file mode 100644 (file)
index 0000000..4e1f27a
--- /dev/null
@@ -0,0 +1 @@
+:c:func:`_PyErr_ChainStackItem` no longer normalizes ``exc_info`` (including setting the traceback on the exception instance) because ``exc_info`` is always normalized.
\ No newline at end of file
index 0a8b5a257fb2c767bd98d091a0b41b562471e246..44d2773acdb5cde2ddd4021f69327f834c2e7982 100644 (file)
@@ -647,26 +647,6 @@ _PyErr_ChainStackItem(_PyErr_StackItem *exc_info)
     PyObject *typ, *val, *tb;
     _PyErr_Fetch(tstate, &typ, &val, &tb);
 
-    PyObject *typ2, *val2, *tb2;
-    typ2 = exc_info->exc_type;
-    val2 = exc_info->exc_value;
-    tb2 = exc_info->exc_traceback;
-#ifdef Py_DEBUG
-    PyObject *typ2_before = typ2;
-    PyObject *val2_before = val2;
-    PyObject *tb2_before = tb2;
-#endif
-    _PyErr_NormalizeException(tstate, &typ2, &val2, &tb2);
-#ifdef Py_DEBUG
-    /* exc_info should already be normalized */
-    assert(typ2 == typ2_before);
-    assert(val2 == val2_before);
-    assert(tb2 == tb2_before);
-#endif
-    if (tb2 != NULL) {
-        PyException_SetTraceback(val2, tb2);
-    }
-
     /* _PyErr_SetObject sets the context from PyThreadState. */
     _PyErr_SetObject(tstate, typ, val);
     Py_DECREF(typ);  // since _PyErr_Occurred was true