]> Cypherpunks repositories - gostls13.git/commitdiff
misc/cgo/errors: limit number of parallel executions
authorIan Lance Taylor <iant@golang.org>
Thu, 30 May 2019 22:32:27 +0000 (18:32 -0400)
committerIan Lance Taylor <iant@golang.org>
Fri, 31 May 2019 00:51:48 +0000 (00:51 +0000)
Fixes #32328

Change-Id: Iee71ecb247f2c439804c2ff03a6ed7b7f5a8b562
Reviewed-on: https://go-review.googlesource.com/c/go/+/179603
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
misc/cgo/errors/ptr_test.go

index 12846cae4441d7563f667e90a68d1d7b88fc9e88..d1ef191bf545b43fa3ba120f7c1f4ffa440b45b4 100644 (file)
@@ -553,18 +553,23 @@ func main() {
 }
 `
 
+var csem = make(chan bool, 16)
+
 func testOne(t *testing.T, pt ptrTest, exe string) {
        t.Parallel()
 
-       newcmd := func(cgocheck string) *exec.Cmd {
+       // Run the tests in parallel, but don't run too many
+       // executions in parallel, to avoid overloading the system.
+       runcmd := func(cgocheck string) ([]byte, error) {
+               csem <- true
+               defer func() { <-csem }()
                cmd := exec.Command(exe, pt.name)
                cmd.Env = append(os.Environ(), "GODEBUG=cgocheck="+cgocheck)
-               return cmd
+               return cmd.CombinedOutput()
        }
 
        if pt.expensive {
-               cmd := newcmd("1")
-               buf, err := cmd.CombinedOutput()
+               buf, err := runcmd("1")
                if err != nil {
                        t.Logf("%s", buf)
                        if pt.fail {
@@ -576,12 +581,12 @@ func testOne(t *testing.T, pt ptrTest, exe string) {
 
        }
 
-       cmd := newcmd("")
+       cgocheck := ""
        if pt.expensive {
-               cmd = newcmd("2")
+               cgocheck = "2"
        }
 
-       buf, err := cmd.CombinedOutput()
+       buf, err := runcmd(cgocheck)
        if pt.fail {
                if err == nil {
                        t.Logf("%s", buf)
@@ -598,8 +603,7 @@ func testOne(t *testing.T, pt ptrTest, exe string) {
 
                if !pt.expensive {
                        // Make sure it passes with the expensive checks.
-                       cmd := newcmd("2")
-                       buf, err := cmd.CombinedOutput()
+                       buf, err := runcmd("2")
                        if err != nil {
                                t.Logf("%s", buf)
                                t.Fatalf("failed unexpectedly with expensive checks: %v", err)
@@ -608,8 +612,7 @@ func testOne(t *testing.T, pt ptrTest, exe string) {
        }
 
        if pt.fail {
-               cmd := newcmd("0")
-               buf, err := cmd.CombinedOutput()
+               buf, err := runcmd("0")
                if err != nil {
                        t.Logf("%s", buf)
                        t.Fatalf("failed unexpectedly with GODEBUG=cgocheck=0: %v", err)