diff options
author | Victor Stinner <victor.stinner@haypocalc.com> | 2011-04-09 13:55:44 (GMT) |
---|---|---|
committer | Victor Stinner <victor.stinner@haypocalc.com> | 2011-04-09 13:55:44 (GMT) |
commit | 52c950f229199fa14bd75e1709183d0b08e90182 (patch) | |
tree | 214bcd32c43fc180d599fb4e0a686a0070cee208 | |
parent | e1292a25d8a063dcc97111cd2b0239dc1aef5aa2 (diff) | |
download | cpython-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/NEWS | 4 | ||||
-rw-r--r-- | Parser/myreadline.c | 9 |
2 files changed, 9 insertions, 4 deletions
@@ -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()) { |