[Python-checkins] r54805 - python/branches/release25-maint/Lib/test/test_pty.py (original) (raw)
barry.warsaw python-checkins at python.org
Fri Apr 13 18:12:05 CEST 2007
- Previous message: [Python-checkins] r54804 - sandbox/trunk/pep0/TODO
- Next message: [Python-checkins] r54805 - python/branches/release25-maint/Lib/test/test_pty.py
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Author: barry.warsaw Date: Fri Apr 13 18:12:02 2007 New Revision: 54805
Modified: python/branches/release25-maint/Lib/test/test_pty.py Log: Add code to read from master_fd in the parent, breaking when we get an OSError (EIO can occur on Linux) or there's no more data to read. Without this, test_pty.py can hang on the waitpid() because the child is blocking on the stdout write. This will definitely happen on Mac OS X and could potentially happen on other platforms. See the comment for details.
Modified: python/branches/release25-maint/Lib/test/test_pty.py
--- python/branches/release25-maint/Lib/test/test_pty.py (original) +++ python/branches/release25-maint/Lib/test/test_pty.py Fri Apr 13 18:12:02 2007 @@ -115,6 +115,24 @@ os._exit(4) else: debug("Waiting for child (%d) to finish."%pid)
In verbose mode, we have to consume the debug output from the child or
the child will block, causing this test to hang in the parent's
waitpid() call. The child blocks after a platform-dependent amount of
data is written to its fd. On Linux 2.6, it's 4000 bytes and the child
won't block, but on OS X even the small writes in the child above will
block it. Also on Linux, the read() will throw an OSError (input/output
error) when it tries to read past the end of the buffer but the child's
already exited, so catch and discard those exceptions. It's not worth
checking for EIO.
- while True:
try:
data = os.read(master_fd, 80)
except OSError:
break
if not data:
break
sys.stdout.write(data.replace('\r\n', '\n'))
##line = os.read(master_fd, 80) ##lines = line.replace('\r\n', '\n').split('\n') ##if False and lines != ['In child, calling os.setsid()',
- Previous message: [Python-checkins] r54804 - sandbox/trunk/pep0/TODO
- Next message: [Python-checkins] r54805 - python/branches/release25-maint/Lib/test/test_pty.py
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]