diff options
author | Zac Medico <zmedico@gentoo.org> | 2010-09-23 00:07:08 -0700 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2010-09-23 00:07:08 -0700 |
commit | 0d7eb266a9d7909591817e4fd899c1c2ab07b53c (patch) | |
tree | c0376313b1869a3f00e3c3b68a3fa431dd1d0a6d | |
parent | b151fa14f49c2b5e4da7bdfdb5eaf29aaf985a7b (diff) | |
download | portage-0d7eb266a9d7909591817e4fd899c1c2ab07b53c.tar.gz portage-0d7eb266a9d7909591817e4fd899c1c2ab07b53c.tar.bz2 portage-0d7eb266a9d7909591817e4fd899c1c2ab07b53c.zip |
Bug #337465 - Make EbuildIpcDaemon._input_handler() use os.read()
since array.fromfile() and file.read() are both known to erroneously
return an empty string from this non-blocking fifo stream on FreeBSD.
-rw-r--r-- | pym/_emerge/EbuildIpcDaemon.py | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/pym/_emerge/EbuildIpcDaemon.py b/pym/_emerge/EbuildIpcDaemon.py index adca1b61e..d418fc80a 100644 --- a/pym/_emerge/EbuildIpcDaemon.py +++ b/pym/_emerge/EbuildIpcDaemon.py @@ -3,7 +3,9 @@ import errno import pickle +from portage import os from _emerge.FifoIpcDaemon import FifoIpcDaemon +from _emerge.PollConstants import PollConstants class EbuildIpcDaemon(FifoIpcDaemon): """ @@ -28,12 +30,18 @@ class EbuildIpcDaemon(FifoIpcDaemon): def _input_handler(self, fd, event): # Read the whole pickle in a single atomic read() call. - buf = self._read_buf(self._files.pipe_in, event) + data = None + if event & PollConstants.POLLIN: + # For maximum portability, use os.read() here since + # array.fromfile() and file.read() are both known to + # erroneously return an empty string from this + # non-blocking fifo stream on FreeBSD (bug #337465). + data = os.read(fd, self._bufsize) - if buf: + if data: try: - obj = pickle.loads(buf.tostring()) + obj = pickle.loads(data) except SystemExit: raise except Exception: |