diff options
author | Zac Medico <zmedico@gentoo.org> | 2009-10-14 20:09:33 +0000 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2009-10-14 20:09:33 +0000 |
commit | f12e625db1e6f8e0d45d4d2e71efc99a4dd72a76 (patch) | |
tree | 8989b1ca75265d0f2a9032fdc367ed0e4f6dbd0b | |
parent | 834b70a261f184a850ea3adce81e95fe819b8c32 (diff) | |
download | portage-f12e625db1e6f8e0d45d4d2e71efc99a4dd72a76.tar.gz portage-f12e625db1e6f8e0d45d4d2e71efc99a4dd72a76.tar.bz2 portage-f12e625db1e6f8e0d45d4d2e71efc99a4dd72a76.zip |
Only call _test_pty_eof() on Linux, since it seems to hang on most other
kernels. This should fix the hang reported on FreeBSD here:
http://archives.gentoo.org/gentoo-alt/msg_d81c5e8c6dd6849312ecb048feb41c5b.xml
svn path=/main/trunk/; revision=14606
-rw-r--r-- | pym/portage/__init__.py | 23 | ||||
-rw-r--r-- | pym/portage/tests/ebuild/test_pty_eof.py | 9 |
2 files changed, 25 insertions, 7 deletions
diff --git a/pym/portage/__init__.py b/pym/portage/__init__.py index fdde3e6d3..5a5fee85b 100644 --- a/pym/portage/__init__.py +++ b/pym/portage/__init__.py @@ -3777,6 +3777,15 @@ class config(object): keys = __iter__ items = iteritems +def _can_test_pty_eof(): + """ + The _test_pty_eof() function seems to hang on most + kernels other than Linux. + @rtype: bool + @returns: True if _test_pty_eof() won't hang, False otherwise. + """ + return platform.system() in ("Linux",) + def _test_pty_eof(): """ Returns True if this issues is fixed for the currently @@ -3861,9 +3870,13 @@ def _test_pty_eof(): return test_string == ''.join(data) -# In some cases, openpty can be slow when it fails. Therefore, -# stop trying to use it after the first failure. -if platform.system() not in ["FreeBSD", "Linux"]: +# If _test_pty_eof() can't be used for runtime detection of +# http://bugs.python.org/issue5380, openpty can't safely be used +# unless we can guarantee that the current version of python has +# been fixed (affects all current versions of python3). When +# 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 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. @@ -3880,6 +3893,10 @@ else: _disable_openpty = False _tested_pty = False +if not _can_test_pty_eof(): + # Skip _test_pty_eof() on systems where it hangs. + _tested_pty = True + def _create_pty_or_pipe(copy_term_size=None): """ Try to create a pty and if then fails then create a normal diff --git a/pym/portage/tests/ebuild/test_pty_eof.py b/pym/portage/tests/ebuild/test_pty_eof.py index 0dd1e8506..31a5df4aa 100644 --- a/pym/portage/tests/ebuild/test_pty_eof.py +++ b/pym/portage/tests/ebuild/test_pty_eof.py @@ -13,7 +13,8 @@ class PtyEofTestCase(TestCase): # Since it might not be fixed, mark as todo. self.todo = True # The result is only valid if openpty does not raise EnvironmentError. - try: - self.assertEqual(portage._test_pty_eof(), True) - except EnvironmentError: - pass + if portage._can_test_pty_eof(): + try: + self.assertEqual(portage._test_pty_eof(), True) + except EnvironmentError: + pass |