diff options
author | Zac Medico <zmedico@gentoo.org> | 2008-12-25 01:23:13 +0000 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2008-12-25 01:23:13 +0000 |
commit | 4e4f97f2163c45fa48701aa4775a46c8fb3c0f61 (patch) | |
tree | fae4b262e813992ae2b59fe179a3a1c3abdb54e0 /pym | |
parent | a0ed8a348a2a8df148a5d9a17105d10eb4f012dc (diff) | |
download | portage-4e4f97f2163c45fa48701aa4775a46c8fb3c0f61.tar.gz portage-4e4f97f2163c45fa48701aa4775a46c8fb3c0f61.tar.bz2 portage-4e4f97f2163c45fa48701aa4775a46c8fb3c0f61.zip |
Make more code conditional on POLLIN events, where appropriate. (trunk r12291)
svn path=/main/branches/2.1.6/; revision=12320
Diffstat (limited to 'pym')
-rw-r--r-- | pym/_emerge/__init__.py | 69 |
1 files changed, 38 insertions, 31 deletions
diff --git a/pym/_emerge/__init__.py b/pym/_emerge/__init__.py index b5b248694..8b6fa3b24 100644 --- a/pym/_emerge/__init__.py +++ b/pym/_emerge/__init__.py @@ -1803,23 +1803,24 @@ class PipeReader(AbstractPollTask): self._read_data = None def _output_handler(self, fd, event): - files = self.input_files - for f in files.itervalues(): - if fd == f.fileno(): - break - buf = array.array('B') if event & PollConstants.POLLIN: + + for f in self.input_files.itervalues(): + if fd == f.fileno(): + break + + buf = array.array('B') try: buf.fromfile(f, self._bufsize) except EOFError: pass - if buf: - self._read_data.append(buf.tostring()) - else: - self._unregister() - self.wait() + if buf: + self._read_data.append(buf.tostring()) + else: + self._unregister() + self.wait() self._unregister_if_appropriate(event) return self._registered @@ -2214,22 +2215,25 @@ class SpawnProcess(SubProcess): return portage.process.spawn(args, **kwargs) def _output_handler(self, fd, event): - files = self._files - buf = array.array('B') + if event & PollConstants.POLLIN: + + files = self._files + buf = array.array('B') try: buf.fromfile(files.process, self._bufsize) except EOFError: pass - if buf: - if not self.background: - buf.tofile(files.stdout) - files.stdout.flush() - buf.tofile(files.log) - files.log.flush() - else: - self._unregister() - self.wait() + + if buf: + if not self.background: + buf.tofile(files.stdout) + files.stdout.flush() + buf.tofile(files.log) + files.log.flush() + else: + self._unregister() + self.wait() self._unregister_if_appropriate(event) return self._registered @@ -2240,18 +2244,20 @@ class SpawnProcess(SubProcess): the only purpose of the pipe is to allow the scheduler to monitor the process from inside a poll() loop. """ - files = self._files - buf = array.array('B') + if event & PollConstants.POLLIN: + + buf = array.array('B') try: - buf.fromfile(files.process, self._bufsize) + buf.fromfile(self._files.process, self._bufsize) except EOFError: pass - if buf: - pass - else: - self._unregister() - self.wait() + + if buf: + pass + else: + self._unregister() + self.wait() self._unregister_if_appropriate(event) return self._registered @@ -2876,9 +2882,10 @@ class EbuildMetadataPhase(SubProcess): portage.process.spawned_pids.remove(self.pid) def _output_handler(self, fd, event): - files = self._files + if event & PollConstants.POLLIN: - self._raw_metadata.append(files.ebuild.read()) + self._raw_metadata.append(self._files.ebuild.read()) + if not self._raw_metadata[-1] or event & PollConstants.POLLHUP: # Split lines here so they can be counted inside _set_returncode(). self._raw_metadata = "".join(self._raw_metadata).splitlines() |