changeset 15871:11bf5b8973c9

mx: drain all subprocess output to callables before returning from mx.run
author Doug Simon <doug.simon@oracle.com>
date Sat, 24 May 2014 00:23:52 +0200
parents fe608a56e3f7
children b7fc7cdb9005
files mxtool/mx.py
diffstat 1 files changed, 5 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/mxtool/mx.py	Fri May 23 19:36:34 2014 +0200
+++ b/mxtool/mx.py	Sat May 24 00:23:52 2014 +0200
@@ -1514,14 +1514,19 @@
         stderr = err if not callable(err) else subprocess.PIPE
         p = subprocess.Popen(args, cwd=cwd, stdout=stdout, stderr=stderr, preexec_fn=preexec_fn, creationflags=creationflags, env=env)
         sub = _addSubprocess(p, args)
+        joiners = []
         if callable(out):
             t = Thread(target=redirect, args=(p.stdout, out))
             # Don't make the reader thread a daemon otherwise output can be droppped
             t.start()
+            joiners.append(t)
         if callable(err):
             t = Thread(target=redirect, args=(p.stderr, err))
             # Don't make the reader thread a daemon otherwise output can be droppped
             t.start()
+            joiners.append(t)
+        for t in joiners:
+            t.join()
         if timeout is None or timeout == 0:
             retcode = waitOn(p)
         else: