From 04f8dfb158bcadc1017a64e9fad5e744d4f91f9c Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Tue, 15 Jan 2013 06:12:27 -0800 Subject: SpawnProcess: avoid fd_pipes interference This fixes a random collision that can occur with FileDigester, triggering malfunction and a KeyError. --- pym/_emerge/SpawnProcess.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'pym') 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 -- cgit v1.2.3-1-g7c22