]> Cypherpunks repositories - gostls13.git/commitdiff
test: fix timeout code for invoking compiler
authorRuss Cox <rsc@golang.org>
Thu, 7 Jan 2021 16:22:42 +0000 (11:22 -0500)
committerRuss Cox <rsc@golang.org>
Fri, 8 Jan 2021 17:14:00 +0000 (17:14 +0000)
When running go tool compile,
go tool is running compile as a subprocess.
Killing go tool with Process.Kill leaves the subprocess behind.
Send an interrupt signal first, which it can forward on
to the compile subprocess.

Also report the timeout in errorcheck -t.

Change-Id: I7ae0029bbe543ed7e60e0fea790dd0739d10bcaa
Reviewed-on: https://go-review.googlesource.com/c/go/+/282313
Trust: Russ Cox <rsc@golang.org>
Run-TryBot: Russ Cox <rsc@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
test/run.go

index db3e9f6c2fc18040fc63b81c27375b90c53031d1..624f2236a116a56a6cfb66dd00c09ede39d20628 100644 (file)
@@ -467,6 +467,8 @@ func goGcflagsIsEmpty() bool {
        return "" == os.Getenv("GO_GCFLAGS")
 }
 
+var errTimeout = errors.New("command exceeded time limit")
+
 // run runs a test.
 func (t *test) run() {
        start := time.Now()
@@ -642,16 +644,18 @@ func (t *test) run() {
                                case err = <-done:
                                        // ok
                                case <-tick.C:
+                                       cmd.Process.Signal(os.Interrupt)
+                                       time.Sleep(1 * time.Second)
                                        cmd.Process.Kill()
-                                       err = <-done
-                                       // err = errors.New("Test timeout")
+                                       <-done
+                                       err = errTimeout
                                }
                                tick.Stop()
                        }
                } else {
                        err = cmd.Run()
                }
-               if err != nil {
+               if err != nil && err != errTimeout {
                        err = fmt.Errorf("%s\n%s", err, buf.Bytes())
                }
                return buf.Bytes(), err
@@ -731,6 +735,10 @@ func (t *test) run() {
                                t.err = fmt.Errorf("compilation succeeded unexpectedly\n%s", out)
                                return
                        }
+                       if err == errTimeout {
+                               t.err = fmt.Errorf("compilation timed out")
+                               return
+                       }
                } else {
                        if err != nil {
                                t.err = err