Wait for stdout/stderr to close (fixes #1754)

This commit is contained in:
Jakob Borg 2015-05-03 17:36:01 +02:00
parent 33048f88b8
commit 67ae7a0b6c
1 changed files with 16 additions and 4 deletions

View File

@ -106,12 +106,24 @@ func monitorMain() {
stdoutLastLines = make([]string, 0, 50)
stdoutMut.Unlock()
go copyStderr(stderr, dst)
go copyStdout(stdout, dst)
wg := sync.NewWaitGroup()
wg.Add(1)
go func() {
copyStderr(stderr, dst)
wg.Done()
}()
wg.Add(1)
go func() {
copyStdout(stdout, dst)
wg.Done()
}()
exit := make(chan error)
go func() {
wg.Wait()
exit <- cmd.Wait()
}()
@ -149,7 +161,7 @@ func monitorMain() {
}
}
func copyStderr(stderr io.ReadCloser, dst io.Writer) {
func copyStderr(stderr io.Reader, dst io.Writer) {
br := bufio.NewReader(stderr)
var panicFd *os.File
@ -192,7 +204,7 @@ func copyStderr(stderr io.ReadCloser, dst io.Writer) {
}
}
func copyStdout(stdout io.ReadCloser, dst io.Writer) {
func copyStdout(stdout io.Reader, dst io.Writer) {
br := bufio.NewReader(stdout)
for {
line, err := br.ReadString('\n')