summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2009-09-27 21:07:38 +0000
committerZac Medico <zmedico@gentoo.org>2009-09-27 21:07:38 +0000
commitbea2e46fe5a942f492c495eaca2e31f4e56c8c53 (patch)
tree4672c4f1a5ff9ff325021acbcb412db3395e7187
parent8da67a5dd3eea67ac10f4c5b24ca73aec19d27ae (diff)
downloadportage-bea2e46fe5a942f492c495eaca2e31f4e56c8c53.tar.gz
portage-bea2e46fe5a942f492c495eaca2e31f4e56c8c53.tar.bz2
portage-bea2e46fe5a942f492c495eaca2e31f4e56c8c53.zip
Try to avoid blocking on Darwin in _test_pty_eof() by using slave_fd directly
instead of fdopen. svn path=/main/trunk/; revision=14453
-rw-r--r--pym/portage/__init__.py12
1 files changed, 5 insertions, 7 deletions
diff --git a/pym/portage/__init__.py b/pym/portage/__init__.py
index b00047027..b8bd4343b 100644
--- a/pym/portage/__init__.py
+++ b/pym/portage/__init__.py
@@ -3754,9 +3754,6 @@ def _test_pty_eof():
# may raise EnvironmentError
master_fd, slave_fd = pty.openpty()
- master_file = os.fdopen(master_fd, 'rb')
- slave_file = os.fdopen(slave_fd, 'wb')
-
# Non-blocking mode is required for Darwin kernel.
fcntl.fcntl(master_fd, fcntl.F_SETFL,
fcntl.fcntl(master_fd, fcntl.F_GETFL) | os.O_NONBLOCK)
@@ -3769,17 +3766,18 @@ def _test_pty_eof():
# Simulate a subprocess writing some data to the
# slave end of the pipe, and then exiting. Do a
- # real fork here since otherwise slave_file.close()
+ # real fork here since otherwise os.close(slave_fd)
# would block on some platforms such as Darwin.
pid = os.fork()
if pid == 0:
- slave_file.write(_unicode_encode(test_string,
+ os.write(slave_fd, _unicode_encode(test_string,
encoding='utf_8', errors='strict'))
- slave_file.close()
+ os.close(slave_fd)
os._exit(os.EX_OK)
else:
- slave_file.close()
+ os.close(slave_fd)
+ master_file = os.fdopen(master_fd, 'rb')
eof = False
data = []
iwtd = [master_file]