diff options
-rw-r--r-- | pym/_emerge/AbstractPollTask.py | 25 | ||||
-rw-r--r-- | pym/_emerge/SpawnProcess.py | 22 |
2 files changed, 30 insertions, 17 deletions
diff --git a/pym/_emerge/AbstractPollTask.py b/pym/_emerge/AbstractPollTask.py index 1feee15f6..833ee3b4c 100644 --- a/pym/_emerge/AbstractPollTask.py +++ b/pym/_emerge/AbstractPollTask.py @@ -1,6 +1,8 @@ -# Copyright 1999-2009 Gentoo Foundation +# Copyright 1999-2010 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 +import array + from _emerge.AsynchronousTask import AsynchronousTask from _emerge.PollConstants import PollConstants class AbstractPollTask(AsynchronousTask): @@ -13,6 +15,27 @@ class AbstractPollTask(AsynchronousTask): _registered_events = PollConstants.POLLIN | PollConstants.POLLHUP | \ _exceptional_events + def _read_buf(self, f, event): + """ + | POLLIN | RETURN + | BIT | VALUE + | --------------------------------------------------- + | 1 | Read self._bufsize into an instance of + | | array.array('B') and return it, ignoring + | | EOFError and IOError. An empty array + | | indicates EOF. + | --------------------------------------------------- + | 0 | None + """ + buf = None + if event & PollConstants.POLLIN: + buf = array.array('B') + try: + buf.fromfile(f, self._bufsize) + except (EOFError, IOError): + pass + return buf + def _unregister(self): raise NotImplementedError(self) diff --git a/pym/_emerge/SpawnProcess.py b/pym/_emerge/SpawnProcess.py index aeb206a06..0cddbe801 100644 --- a/pym/_emerge/SpawnProcess.py +++ b/pym/_emerge/SpawnProcess.py @@ -1,8 +1,7 @@ -# Copyright 1999-2009 Gentoo Foundation +# Copyright 1999-2010 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 from _emerge.SubProcess import SubProcess -from _emerge.PollConstants import PollConstants import sys from portage.cache.mappings import slot_dict_class import portage @@ -11,7 +10,6 @@ from portage import _unicode_encode from portage import os import fcntl import errno -import array import gzip class SpawnProcess(SubProcess): @@ -150,14 +148,10 @@ class SpawnProcess(SubProcess): def _output_handler(self, fd, event): - if event & PollConstants.POLLIN: + files = self._files + buf = self._read_buf(files.process, event) - files = self._files - buf = array.array('B') - try: - buf.fromfile(files.process, self._bufsize) - except (EOFError, IOError): - pass + if buf is not None: if buf: if not self.background: @@ -215,13 +209,9 @@ class SpawnProcess(SubProcess): monitor the process from inside a poll() loop. """ - if event & PollConstants.POLLIN: + buf = self._read_buf(self._files.process, event) - buf = array.array('B') - try: - buf.fromfile(self._files.process, self._bufsize) - except (EOFError, IOError): - pass + if buf is not None: if buf: pass |