summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pym/_emerge/AbstractPollTask.py9
-rw-r--r--pym/_emerge/PipeReader.py9
2 files changed, 14 insertions, 4 deletions
diff --git a/pym/_emerge/AbstractPollTask.py b/pym/_emerge/AbstractPollTask.py
index ea13587bc..d4785a2a1 100644
--- a/pym/_emerge/AbstractPollTask.py
+++ b/pym/_emerge/AbstractPollTask.py
@@ -50,9 +50,14 @@ class AbstractPollTask(AsynchronousTask):
except OSError as e:
# EIO happens with pty on Linux after the
# slave end of the pty has been closed.
- if e.errno not in (errno.EAGAIN, errno.EIO):
+ if e.errno == errno.EIO:
+ # EOF: return empty buffer
+ pass
+ elif e.errno == errno.EAGAIN:
+ # EAGAIN: return None
+ buf = None
+ else:
raise
- buf = None
return buf
diff --git a/pym/_emerge/PipeReader.py b/pym/_emerge/PipeReader.py
index 78acb72df..a465c2a28 100644
--- a/pym/_emerge/PipeReader.py
+++ b/pym/_emerge/PipeReader.py
@@ -66,9 +66,14 @@ class PipeReader(AbstractPollTask):
except OSError as e:
# EIO happens with pty on Linux after the
# slave end of the pty has been closed.
- if e.errno not in (errno.EAGAIN, errno.EIO):
+ if e.errno == errno.EIO:
+ self._unregister()
+ self.wait()
+ break
+ elif e.errno == errno.EAGAIN:
+ break
+ else:
raise
- break
else:
if data:
self._read_data.append(data)