summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2012-02-15 14:17:38 -0800
committerZac Medico <zmedico@gentoo.org>2012-02-15 14:17:38 -0800
commitfb89e5a829dfe0083b921c8c3958a3341d055cf8 (patch)
tree82db71574d9567cc62cbe696f5eafafca8f1d769
parenta979c180b5c8ce98231d7e3c20f2d38d272f7b45 (diff)
downloadportage-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.py17
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: