Make _test_pty_eof() call process.spawn() instead of os.fork().
authorZac Medico <zmedico@gentoo.org>
Sun, 27 Sep 2009 21:55:41 +0000 (21:55 -0000)
committerZac Medico <zmedico@gentoo.org>
Sun, 27 Sep 2009 21:55:41 +0000 (21:55 -0000)
svn path=/main/trunk/; revision=14454

pym/portage/__init__.py

index b8bd4343b3fbf153fbf038af10a9c0b94930fb66..d486227dca503c21abda84b207bd4bd2c43ef5c3 100644 (file)
@@ -3768,14 +3768,15 @@ def _test_pty_eof():
        # slave end of the pipe, and then exiting. Do a
        # real fork here since otherwise os.close(slave_fd)
        # would block on some platforms such as Darwin.
-       pid = os.fork()
-       if pid == 0:
-               os.write(slave_fd, _unicode_encode(test_string,
-                       encoding='utf_8', errors='strict'))
-               os.close(slave_fd)
-               os._exit(os.EX_OK)
-       else:
+       pids = process.spawn_bash(_unicode_encode("echo -n '%s'" % test_string,
+               encoding='utf_8', errors='strict'), env=os.environ,
+               fd_pipes={0:sys.stdin.fileno(), 1:slave_fd, 2:slave_fd},
+               returnpid=True)
+       if isinstance(pids, int):
+               os.close(master_fd)
                os.close(slave_fd)
+               raise EnvironmentError('spawn failed')
+       os.close(slave_fd)
 
        master_file = os.fdopen(master_fd, 'rb')
        eof = False
@@ -3806,7 +3807,7 @@ def _test_pty_eof():
                        data.append(_unicode_decode(buf.tostring(),
                                encoding='utf_8', errors='strict'))
 
-       os.waitpid(pid, 0)
+       os.waitpid(pids[0], 0)
        master_file.close()
 
        return test_string == ''.join(data)