From c6c71eefb9532af0d4505de70e58f45ad8e8fe0a Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Thu, 1 Dec 2011 22:14:13 -0800 Subject: Handle OSError from os.read and loop if needed. Looping fixes EbuildMetadataPhase failures for ebuilds that produce more than 4096 bytes of metadata, broken since commit b432a1b3051d91546649e8f3190675767461d8e8. --- pym/_emerge/PipeReader.py | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) (limited to 'pym/_emerge/PipeReader.py') diff --git a/pym/_emerge/PipeReader.py b/pym/_emerge/PipeReader.py index 67144c393..af8cfdd4e 100644 --- a/pym/_emerge/PipeReader.py +++ b/pym/_emerge/PipeReader.py @@ -59,18 +59,21 @@ class PipeReader(AbstractPollTask): if event & PollConstants.POLLIN: - data = None - try: - data = os.read(fd, self._bufsize) - except IOError as e: - if e.errno not in (errno.EAGAIN,): - raise - else: - if data: - self._read_data.append(data) + while True: + data = None + try: + data = os.read(fd, self._bufsize) + except OSError as e: + if e.errno not in (errno.EAGAIN,): + raise + break else: - self._unregister() - self.wait() + if data: + self._read_data.append(data) + else: + self._unregister() + self.wait() + break self._unregister_if_appropriate(event) -- cgit v1.2.3-1-g7c22