[Python-checkins] bpo-45711: Remove unnecessary normalization of exc_info (GH-29922)
iritkatriel
webhook-mailer at python.org
Wed Dec 8 15:08:12 EST 2021
https://github.com/python/cpython/commit/2109f7880b65755329a877da3a7f8a362de07350
commit: 2109f7880b65755329a877da3a7f8a362de07350
branch: main
author: Irit Katriel <1055913+iritkatriel at users.noreply.github.com>
committer: iritkatriel <1055913+iritkatriel at users.noreply.github.com>
date: 2021-12-08T20:08:06Z
summary:
bpo-45711: Remove unnecessary normalization of exc_info (GH-29922)
files:
A Misc/NEWS.d/next/Core and Builtins/2021-12-05-17-36-08.bpo-45711.3TmTSw.rst
M 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
index 0000000000000..4e1f27a077b50
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2021-12-05-17-36-08.bpo-45711.3TmTSw.rst
@@ -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
diff --git a/Python/errors.c b/Python/errors.c
index 0a8b5a257fb2c..44d2773acdb5c 100644
--- a/Python/errors.c
+++ b/Python/errors.c
@@ -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
More information about the Python-checkins
mailing list