From: Zac Medico Date: Fri, 21 Jan 2011 02:14:26 +0000 (-0800) Subject: SpawnProcess: read proc with unbuffered fdopen X-Git-Tag: v2.1.9.35~3 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=d3fe50f16ebed2f82283a3ce20a407a895333872;p=portage.git SpawnProcess: read proc with unbuffered fdopen This enables pty support in python3, by using unbuffered fdopen to avoid http://bugs.python.org/issue5380. --- diff --git a/pym/_emerge/SpawnProcess.py b/pym/_emerge/SpawnProcess.py index 0cddbe801..bc861e9c5 100644 --- a/pym/_emerge/SpawnProcess.py +++ b/pym/_emerge/SpawnProcess.py @@ -1,4 +1,4 @@ -# Copyright 1999-2010 Gentoo Foundation +# Copyright 1999-2011 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 from _emerge.SubProcess import SubProcess @@ -72,7 +72,9 @@ class SpawnProcess(SubProcess): else: fd_pipes[0] = fd_pipes_orig[0] - files.process = os.fdopen(master_fd, 'rb') + # WARNING: It is very important to use unbuffered mode here, + # in order to avoid issue 5380 with python3. + files.process = os.fdopen(master_fd, 'rb', 0) if logfile is not None: fd_pipes[1] = slave_fd diff --git a/pym/portage/tests/ebuild/test_pty_eof.py b/pym/portage/tests/ebuild/test_pty_eof.py index c4386e944..251b63c43 100644 --- a/pym/portage/tests/ebuild/test_pty_eof.py +++ b/pym/portage/tests/ebuild/test_pty_eof.py @@ -14,7 +14,7 @@ class PtyEofTestCase(TestCase): # The result is only valid if openpty does not raise EnvironmentError. if _can_test_pty_eof(): try: - self.assertEqual(_test_pty_eof(), True) + self.assertEqual(_test_pty_eof(fdopen_buffered=True), True) except EnvironmentError: pass @@ -26,6 +26,6 @@ class PtyEofTestCase(TestCase): # The result is only valid if openpty does not raise EnvironmentError. if _can_test_pty_eof(): try: - self.assertEqual(_test_pty_eof(fdopen_buffered=False), True) + self.assertEqual(_test_pty_eof(), True) except EnvironmentError: pass diff --git a/pym/portage/util/_pty.py b/pym/portage/util/_pty.py index 7e769d204..c96bf74fd 100644 --- a/pym/portage/util/_pty.py +++ b/pym/portage/util/_pty.py @@ -1,4 +1,4 @@ -# Copyright 2010 Gentoo Foundation +# Copyright 2010-2011 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 import array @@ -28,7 +28,7 @@ def _can_test_pty_eof(): """ return platform.system() in ("Linux",) -def _test_pty_eof(fdopen_buffered=True): +def _test_pty_eof(fdopen_buffered=False): """ Returns True if this issues is fixed for the currently running version of python: http://bugs.python.org/issue5380