]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: kill test.out after 1 minute
authorRuss Cox <rsc@golang.org>
Wed, 11 Jan 2012 05:01:58 +0000 (21:01 -0800)
committerRuss Cox <rsc@golang.org>
Wed, 11 Jan 2012 05:01:58 +0000 (21:01 -0800)
Will have to do better but this is enough to
stop the builders from hanging, I hope.

R=golang-dev, dsymonds, adg
CC=golang-dev
https://golang.org/cl/5533066

src/cmd/go/test.go

index b707cab1dc797057f14d476f43bcdeda5025198f..a0a33335cd13b7d005fdc300bb58d8eb7e2f45f4 100644 (file)
@@ -463,8 +463,30 @@ func (b *builder) runTest(a *action) error {
 
        cmd := exec.Command(args[0], args[1:]...)
        cmd.Dir = a.p.Dir
+       var buf bytes.Buffer
+       cmd.Stdout = &buf
+       cmd.Stderr = &buf
+
        t0 := time.Now()
-       out, err := cmd.CombinedOutput()
+       err := cmd.Start()
+       const deadline = 1 * time.Minute
+       tick := time.NewTimer(deadline)
+       if err == nil {
+               done := make(chan error)
+               go func() {
+                       done <- cmd.Wait()
+               }()
+               select {
+               case err = <-done:
+                       // ok
+               case <-tick.C:
+                       cmd.Process.Kill()
+                       err = <-done
+                       fmt.Fprintf(&buf, "*** Test killed: ran too long.\n")
+               }
+               tick.Stop()
+       }
+       out := buf.Bytes()
        t1 := time.Now()
        t := fmt.Sprintf("%.3fs", t1.Sub(t0).Seconds())
        if err == nil {