Make more code conditional on POLLIN events, where appropriate. (trunk r12291)
authorZac Medico <zmedico@gentoo.org>
Thu, 25 Dec 2008 01:23:13 +0000 (01:23 -0000)
committerZac Medico <zmedico@gentoo.org>
Thu, 25 Dec 2008 01:23:13 +0000 (01:23 -0000)
svn path=/main/branches/2.1.6/; revision=12320

pym/_emerge/__init__.py

index b5b2486945ce0d8e6177d31239a6eb56f3ace716..8b6fa3b24d814c383c3d56936b15678a30dee122 100644 (file)
@@ -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()