From: Zac Medico Date: Tue, 15 Jan 2013 14:12:27 +0000 (-0800) Subject: SpawnProcess: avoid fd_pipes interference X-Git-Tag: v2.2.0_alpha153~3 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=04f8dfb158bcadc1017a64e9fad5e744d4f91f9c;p=portage.git SpawnProcess: avoid fd_pipes interference This fixes a random collision that can occur with FileDigester, triggering malfunction and a KeyError. --- diff --git a/pym/_emerge/SpawnProcess.py b/pym/_emerge/SpawnProcess.py index 5d0fcf6dd..9c754add5 100644 --- a/pym/_emerge/SpawnProcess.py +++ b/pym/_emerge/SpawnProcess.py @@ -76,8 +76,14 @@ class SpawnProcess(SubProcess): else: # Create a dummy pipe so the scheduler can monitor - # the process from inside a poll() loop. - fd_pipes[self._dummy_pipe_fd] = slave_fd + # the process from inside a poll() loop. Ensure that + # it doesn't interfere with a random fd that's already + # in fd_pipes though (as least FileDigester can pass + # in a random fd returned from os.pipe()). + unique_dummy_fd = self._dummy_pipe_fd + while unique_dummy_fd in fd_pipes: + unique_dummy_fd += 1 + fd_pipes[unique_dummy_fd] = slave_fd if self.background: fd_pipes[1] = slave_fd fd_pipes[2] = slave_fd