In spawn(), initialize default fd_pipes before doing the stdout/stderr flush.
authorZac Medico <zmedico@gentoo.org>
Sun, 23 Sep 2007 18:08:03 +0000 (18:08 -0000)
committerZac Medico <zmedico@gentoo.org>
Sun, 23 Sep 2007 18:08:03 +0000 (18:08 -0000)
svn path=/main/trunk/; revision=7796

pym/portage/__init__.py

index 271e116691b888964608756db8db950dd51f8201..d4411a7fc37bc6095165a5f1450b25766f85baf9 100644 (file)
@@ -2385,14 +2385,16 @@ def spawn(mystring, mysettings, debug=0, free=0, droppriv=0, sesandbox=0, fakero
                env=mysettings.environ()
                keywords["opt_name"]="[%s]" % mysettings["PF"]
 
+       fd_pipes = keywords.get("fd_pipes")
+       if fd_pipes is None:
+               fd_pipes = {0:0, 1:1, 2:2}
        # In some cases the above print statements don't flush stdout, so
        # it needs to be flushed before allowing a child process to use it
        # so that output always shows in the correct order.
-       fd_pipes = keywords.get("fd_pipes")
-       if fd_pipes:
-               if fd_pipes.get(1) == sys.stdout.fileno():
+       for fd in fd_pipes.itervalues():
+               if fd == sys.stdout.fileno():
                        sys.stdout.flush()
-               if fd_pipes.get(2) == sys.stderr.fileno():
+               if fd == sys.stderr.fileno():
                        sys.stderr.flush()
 
        # The default policy for the sesandbox domain only allows entry (via exec)
@@ -2408,10 +2410,7 @@ def spawn(mystring, mysettings, debug=0, free=0, droppriv=0, sesandbox=0, fakero
        got_pty = False
        if logfile:
                del keywords["logfile"]
-               fd_pipes = keywords.get("fd_pipes")
-               if fd_pipes is None:
-                       fd_pipes = {0:0, 1:1, 2:2}
-               elif 1 not in fd_pipes or 2 not in fd_pipes:
+               if 1 not in fd_pipes or 2 not in fd_pipes:
                        raise ValueError(fd_pipes)
                from pty import openpty
                try: