diff options
author | Zac Medico <zmedico@gentoo.org> | 2012-02-15 14:17:38 -0800 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2012-02-15 14:17:38 -0800 |
commit | fb89e5a829dfe0083b921c8c3958a3341d055cf8 (patch) | |
tree | 82db71574d9567cc62cbe696f5eafafca8f1d769 | |
parent | a979c180b5c8ce98231d7e3c20f2d38d272f7b45 (diff) | |
download | portage-fb89e5a829dfe0083b921c8c3958a3341d055cf8.tar.gz portage-fb89e5a829dfe0083b921c8c3958a3341d055cf8.tar.bz2 portage-fb89e5a829dfe0083b921c8c3958a3341d055cf8.zip |
treewalk: handle EAGAIN from listdir for PyPy 1.8
-rw-r--r-- | pym/portage/dbapi/vartree.py | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py index a86170c1a..96c2530bb 100644 --- a/pym/portage/dbapi/vartree.py +++ b/pym/portage/dbapi/vartree.py @@ -3402,6 +3402,7 @@ class dblink(object): while True: unicode_error = False + eagain_error = False myfilelist = [] mylinklist = [] @@ -3409,7 +3410,19 @@ class dblink(object): srcroot_len = len(srcroot) def onerror(e): raise - for parent, dirs, files in os.walk(srcroot, onerror=onerror): + walk_iter = os.walk(srcroot, onerror=onerror) + while True: + try: + parent, dirs, files = next(walk_iter) + except StopIteration: + break + except OSError as e: + if e.errno != errno.EAGAIN: + raise + # Observed with PyPy 1.8. + eagain_error = True + break + try: parent = _unicode_decode(parent, encoding=_encodings['merge'], errors='strict') @@ -3464,7 +3477,7 @@ class dblink(object): if unicode_error: break - if not unicode_error: + if not (unicode_error or eagain_error): break if unicode_errors: |