Try to avoid blocking on Darwin in _test_pty_eof() by using slave_fd directly
authorZac Medico <zmedico@gentoo.org>
Sun, 27 Sep 2009 21:07:38 +0000 (21:07 -0000)
committerZac Medico <zmedico@gentoo.org>
Sun, 27 Sep 2009 21:07:38 +0000 (21:07 -0000)
instead of fdopen.

svn path=/main/trunk/; revision=14453

pym/portage/__init__.py

index b00047027819bf0b061991f5d2da422382325b9f..b8bd4343b3fbf153fbf038af10a9c0b94930fb66 100644 (file)
@@ -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]