From: Zac Medico Date: Sun, 27 Sep 2009 19:45:09 +0000 (-0000) Subject: Make _test_pty_eof() use non-blocking IO, required for Darwin kernel. X-Git-Tag: v2.2_rc43~27 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=6bcbf5501d74819f078fb0b32cadccf15d3d2cfa;p=portage.git Make _test_pty_eof() use non-blocking IO, required for Darwin kernel. svn path=/main/trunk/; revision=14449 --- diff --git a/pym/portage/__init__.py b/pym/portage/__init__.py index 67ab6b068..05f7b86bd 100644 --- a/pym/portage/__init__.py +++ b/pym/portage/__init__.py @@ -3746,7 +3746,7 @@ def _test_pty_eof(): Raises an EnvironmentError from openpty() if it fails. """ - import array, pty, termios + import array, fcntl, pty, select, termios test_string = 2 * "blah blah blah\n" test_string = _unicode_decode(test_string, encoding='utf_8', errors='strict') @@ -3757,6 +3757,10 @@ def _test_pty_eof(): 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) + # Disable post-processing of output since otherwise weird # things like \n -> \r\n transformations may occur. mode = termios.tcgetattr(slave_fd) @@ -3771,9 +3775,17 @@ def _test_pty_eof(): eof = False data = [] + iwtd = [master_file] + owtd = [] + ewtd = [] while not eof: + events = select.select(iwtd, owtd, ewtd) + if not events[0]: + eof = True + break + buf = array.array('B') try: buf.fromfile(master_file, 1024)