summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@haypocalc.com>2011-04-09 13:55:44 (GMT)
committerVictor Stinner <victor.stinner@haypocalc.com>2011-04-09 13:55:44 (GMT)
commit52c950f229199fa14bd75e1709183d0b08e90182 (patch)
tree214bcd32c43fc180d599fb4e0a686a0070cee208
parente1292a25d8a063dcc97111cd2b0239dc1aef5aa2 (diff)
downloadcpython-52c950f229199fa14bd75e1709183d0b08e90182.zip
cpython-52c950f229199fa14bd75e1709183d0b08e90182.tar.gz
cpython-52c950f229199fa14bd75e1709183d0b08e90182.tar.bz2
Issue #11650: PyOS_StdioReadline() retries fgets() if it was interrupted
(EINTR), for example if the program is stopped with CTRL+z on Mac OS X. Patch written by Charles-Francois Natali.
-rw-r--r--Misc/NEWS4
-rw-r--r--Parser/myreadline.c9
2 files changed, 9 insertions, 4 deletions
diff --git a/Misc/NEWS b/Misc/NEWS
index 2d1327c..895e50d 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -10,6 +10,10 @@ What's New in Python 3.1.4?
Core and Builtins
-----------------
+- Issue #11650: PyOS_StdioReadline() retries fgets() if it was interrupted
+ (EINTR), for example if the program is stopped with CTRL+z on Mac OS X. Patch
+ written by Charles-Francois Natali.
+
- Issue #8651: PyArg_Parse*() functions raise an OverflowError if the file
doesn't have PY_SSIZE_T_CLEAN define and the size doesn't fit in an int
(length bigger than 2^31-1 bytes).
diff --git a/Parser/myreadline.c b/Parser/myreadline.c
index a62e208..7166fc1 100644
--- a/Parser/myreadline.c
+++ b/Parser/myreadline.c
@@ -36,7 +36,7 @@ static int
my_fgets(char *buf, int len, FILE *fp)
{
char *p;
- for (;;) {
+ while (1) {
if (PyOS_InputHook != NULL)
(void)(PyOS_InputHook)();
errno = 0;
@@ -85,9 +85,10 @@ my_fgets(char *buf, int len, FILE *fp)
#ifdef WITH_THREAD
PyEval_SaveThread();
#endif
- if (s < 0) {
- return 1;
- }
+ if (s < 0)
+ return 1;
+ /* try again */
+ continue;
}
#endif
if (PyOS_InterruptOccurred()) {