diff options
-rw-r--r-- | pym/_emerge/AbstractPollTask.py | 9 | ||||
-rw-r--r-- | pym/_emerge/PipeReader.py | 9 |
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) |