From 0fdef36d3557ea3ee64a8982e66338db2ebbd1f8 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Sat, 3 Oct 2009 06:59:23 +0000 Subject: Fix race condition when using a fork inside _test_pty_eof(). svn path=/main/trunk/; revision=14478 --- pym/portage/__init__.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/pym/portage/__init__.py b/pym/portage/__init__.py index 6f88f00fa..1469cd961 100644 --- a/pym/portage/__init__.py +++ b/pym/portage/__init__.py @@ -3768,8 +3768,6 @@ def _test_pty_eof(): # Simulate a subprocess writing some data to the # slave end of the pipe, and then exiting. - # Using a fork here gave inconsistent results, - # so it's disabled now. pid = None if use_fork: pids = process.spawn_bash(_unicode_encode("echo -n '%s'" % test_string, @@ -3786,6 +3784,12 @@ def _test_pty_eof(): encoding='utf_8', errors='strict')) os.close(slave_fd) + # If using a fork, we must wait for the child here, + # in order to avoid a race condition that would + # lead to inconsistent results. + if pid is not None: + os.waitpid(pid, 0) + master_file = os.fdopen(master_fd, 'rb') eof = False data = [] @@ -3815,8 +3819,6 @@ def _test_pty_eof(): data.append(_unicode_decode(buf.tostring(), encoding='utf_8', errors='strict')) - if pid is not None: - os.waitpid(pid, 0) master_file.close() return test_string == ''.join(data) -- cgit v1.2.3-1-g7c22