Browse Source

Merge pull request #1755 from calmh/fix-1754

Wait for stdout/stderr to close (fixes #1754)
Audrius Butkevicius 10 years ago
parent
commit
7e29a8b927
1 changed files with 16 additions and 4 deletions
  1. 16 4
      cmd/syncthing/monitor.go

+ 16 - 4
cmd/syncthing/monitor.go

@@ -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')