From d53f380e620c59cb3f30736584879c3c104ee488 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Thu, 30 May 2019 18:32:27 -0400 Subject: [PATCH] misc/cgo/errors: limit number of parallel executions Fixes #32328 Change-Id: Iee71ecb247f2c439804c2ff03a6ed7b7f5a8b562 Reviewed-on: https://go-review.googlesource.com/c/go/+/179603 Run-TryBot: Ian Lance Taylor TryBot-Result: Gobot Gobot Reviewed-by: Brad Fitzpatrick --- misc/cgo/errors/ptr_test.go | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/misc/cgo/errors/ptr_test.go b/misc/cgo/errors/ptr_test.go index 12846cae44..d1ef191bf5 100644 --- a/misc/cgo/errors/ptr_test.go +++ b/misc/cgo/errors/ptr_test.go @@ -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) -- 2.50.0