summaryrefslogtreecommitdiffstats
path: root/pym/_emerge/__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'pym/_emerge/__init__.py')
-rw-r--r--pym/_emerge/__init__.py14
1 files changed, 12 insertions, 2 deletions
diff --git a/pym/_emerge/__init__.py b/pym/_emerge/__init__.py
index 6f975449a..b111157ea 100644
--- a/pym/_emerge/__init__.py
+++ b/pym/_emerge/__init__.py
@@ -1594,6 +1594,8 @@ class PipeReader(AsynchronousTask):
__slots__ = ("input_files", "scheduler",) + \
("pid", "registered", "_reg_ids", "_read_data")
+ _bufsize = 4096
+
def _start(self):
self._reg_ids = set()
self._read_data = []
@@ -1628,8 +1630,16 @@ class PipeReader(AsynchronousTask):
for f in files.itervalues():
if fd == f.fileno():
break
- self._read_data.append(f.read())
- if not self._read_data[-1]:
+
+ buf = array.array('B')
+ try:
+ buf.fromfile(f, self._bufsize)
+ except EOFError:
+ pass
+
+ if buf:
+ self._read_data.append(buf.tostring())
+ else:
for f in files.values():
f.close()
self.registered = False