From: Fabian Groffen Date: Sat, 24 Oct 2009 11:13:39 +0000 (-0000) Subject: Try to resolve the openpty misery this time for real. Moved documentation about... X-Git-Url: http://git.tremily.us/gitweb.cgi?a=commitdiff_plain;h=a1c21326b103bee98f926ce207a035a10c7dde72;p=portage.git Try to resolve the openpty misery this time for real. Moved documentation about test_openpty_eof into that function, reenabled disabling openpty on Solaris (it got lost previously breaking Portage on Solaris) and hoping that Interix gets openpty again now, as it doesn't work with pipes. svn path=/main/branches/prefix/; revision=14721 --- diff --git a/pym/portage/__init__.py b/pym/portage/__init__.py index 11c80fccb..3d431ff17 100644 --- a/pym/portage/__init__.py +++ b/pym/portage/__init__.py @@ -3807,6 +3807,11 @@ def _can_test_pty_eof(): """ The _test_pty_eof() function seems to hang on most kernels other than Linux. + This was reported for the following kernels which used to work fine + without this EOF test: Darwin, AIX, FreeBSD. They seem to hang on + the slave_file.close() call. Note that Python's implementation of + openpty on Solaris already caused random hangs without this EOF test + and hence is globally disabled. @rtype: bool @returns: True if _test_pty_eof() won't hang, False otherwise. """ @@ -3903,20 +3908,14 @@ def _test_pty_eof(): # this issue is fixed in python3, we can add another sys.hexversion # conditional to enable openpty support in the fixed versions. if sys.hexversion >= 0x3000000 and not _can_test_pty_eof(): + _disable_openpty = True +else: # Disable the use of openpty on Solaris as it seems Python's openpty # implementation doesn't play nice on Solaris with Portage's # behaviour causing hangs/deadlocks. - # Disable on Darwin also, it used to work fine, but since the - # introduction of _test_pty_eof Portage hangs (on the - # slave_file.close()) indicating some other problems with openpty on - # Darwin there - # On AIX, haubi reported that the openpty code doesn't work any - # longer since the introduction of _test_pty_eof either. - # Looks like Python's openpty module is too fragile to use on UNIX, - # so only use it on Linux - _disable_openpty = True -else: - _disable_openpty = False + # Additional note for the future: on Interix, pipes do NOT work, so + # _disable_openpty on Interix must *never* be True + _disable_openpty = platform.system() in ("SunOS",) _tested_pty = False if not _can_test_pty_eof():