Fix race condition when using a fork inside _test_pty_eof().
authorZac Medico <zmedico@gentoo.org>
Sat, 3 Oct 2009 06:59:23 +0000 (06:59 -0000)
committerZac Medico <zmedico@gentoo.org>
Sat, 3 Oct 2009 06:59:23 +0000 (06:59 -0000)
svn path=/main/trunk/; revision=14478

pym/portage/__init__.py

index 6f88f00fae855913a5893894320834859499fb18..1469cd96106b520366900982a140221b7b5b48a6 100644 (file)
@@ -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)