summaryrefslogtreecommitdiffstats
path: root/Python
diff options
context:
space:
mode:
authorAmaury Forgeot d'Arc <amauryfa@gmail.com>2008-04-04 23:25:27 (GMT)
committerAmaury Forgeot d'Arc <amauryfa@gmail.com>2008-04-04 23:25:27 (GMT)
commit9ed77358d618e4c65fbe5df67a87618be29fc391 (patch)
tree20eff232a288142e83f20de808626c9c3c8fbeec /Python
parentbff533b4798de3909b53dc2d14d9b074587c17ac (diff)
downloadcpython-9ed77358d618e4c65fbe5df67a87618be29fc391.zip
cpython-9ed77358d618e4c65fbe5df67a87618be29fc391.tar.gz
cpython-9ed77358d618e4c65fbe5df67a87618be29fc391.tar.bz2
Issue2221: in Idle, exec('xx') raised a SystemError('error return without exception set')
instead of the expected NameError This happens when sys.stdout is redirected to something that cannot flush(). the flush_io() function must be exception-neutral: don't raise, and don't clear exceptions. Next step: exec() is not supposed to flush sys.stdout...
Diffstat (limited to 'Python')
-rw-r--r--Python/pythonrun.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index 74e3430..3207fb8 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -1467,6 +1467,11 @@ static void
flush_io(void)
{
PyObject *f, *r;
+ PyObject *type, *value, *traceback;
+
+ /* Save the current exception */
+ PyErr_Fetch(&type, &value, &traceback);
+
f = PySys_GetObject("stderr");
if (f != NULL) {
r = PyObject_CallMethod(f, "flush", "");
@@ -1483,6 +1488,8 @@ flush_io(void)
else
PyErr_Clear();
}
+
+ PyErr_Restore(type, value, traceback);
}
static PyObject *