[Python-checkins] cpython (3.4): PyErr_NormalizeException doesn't like being called with an exception set

serhiy.storchaka python-checkins at python.org
Wed Jun 11 06:20:07 CEST 2014


http://hg.python.org/cpython/rev/a98fd4eeed40
changeset: 91123:a98fd4eeed40
branch: 3.4
parent: 91119:b841b80e6421
user: Serhiy Storchaka <storchaka at gmail.com>
date: Wed Jun 11 07:18:53 2014 +0300
summary:
 PyErr_NormalizeException doesn't like being called with an exception set
(issues #21677, #21310).
files:
 Modules/_io/_iomodule.c | 8 ++++----
 Modules/_io/bufferedio.c | 8 ++++----
 Modules/_io/textio.c | 8 ++++----
 3 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/Modules/_io/_iomodule.c b/Modules/_io/_iomodule.c
--- a/Modules/_io/_iomodule.c
+++ b/Modules/_io/_iomodule.c
@@ -470,14 +470,14 @@
 if (_PyObject_CallMethodId(result, &PyId_close, NULL) != NULL)
 PyErr_Restore(exc, val, tb);
 else {
- PyObject *val2;
+ PyObject *exc2, *val2, *tb2;
+ PyErr_Fetch(&exc2, &val2, &tb2);
 PyErr_NormalizeException(&exc, &val, &tb);
 Py_XDECREF(exc);
 Py_XDECREF(tb);
- PyErr_Fetch(&exc, &val2, &tb);
- PyErr_NormalizeException(&exc, &val2, &tb);
+ PyErr_NormalizeException(&exc2, &val2, &tb2);
 PyException_SetContext(val2, val);
- PyErr_Restore(exc, val2, tb);
+ PyErr_Restore(exc2, val2, tb2);
 }
 Py_DECREF(result);
 }
diff --git a/Modules/_io/bufferedio.c b/Modules/_io/bufferedio.c
--- a/Modules/_io/bufferedio.c
+++ b/Modules/_io/bufferedio.c
@@ -548,14 +548,14 @@
 PyErr_Restore(exc, val, tb);
 }
 else {
- PyObject *val2;
+ PyObject *exc2, *val2, *tb2;
+ PyErr_Fetch(&exc2, &val2, &tb2);
 PyErr_NormalizeException(&exc, &val, &tb);
 Py_DECREF(exc);
 Py_XDECREF(tb);
- PyErr_Fetch(&exc, &val2, &tb);
- PyErr_NormalizeException(&exc, &val2, &tb);
+ PyErr_NormalizeException(&exc2, &val2, &tb2);
 PyException_SetContext(val2, val);
- PyErr_Restore(exc, val2, tb);
+ PyErr_Restore(exc2, val2, tb2);
 }
 }
 
diff --git a/Modules/_io/textio.c b/Modules/_io/textio.c
--- a/Modules/_io/textio.c
+++ b/Modules/_io/textio.c
@@ -2613,14 +2613,14 @@
 PyErr_Restore(exc, val, tb);
 }
 else {
- PyObject *val2;
+ PyObject *exc2, *val2, *tb2;
+ PyErr_Fetch(&exc2, &val2, &tb2);
 PyErr_NormalizeException(&exc, &val, &tb);
 Py_DECREF(exc);
 Py_XDECREF(tb);
- PyErr_Fetch(&exc, &val2, &tb);
- PyErr_NormalizeException(&exc, &val2, &tb);
+ PyErr_NormalizeException(&exc2, &val2, &tb2);
 PyException_SetContext(val2, val);
- PyErr_Restore(exc, val2, tb);
+ PyErr_Restore(exc2, val2, tb2);
 }
 }
 return res;
-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /