]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: deflake CGO traceback tests
authorMark Pulford <mark@kyne.com.au>
Thu, 13 Feb 2020 21:34:31 +0000 (08:34 +1100)
committerIan Lance Taylor <iant@golang.org>
Sun, 1 Mar 2020 14:57:24 +0000 (14:57 +0000)
The CGO traceback function is called whenever CGO code is executing and
a signal is received. This occurs much more frequently now SIGURG
is used for preemption.

Disable signal preemption to significantly increase the likelihood that
a signal results in a profile sample during the test.

Updates #37201

Change-Id: Icb1a33ab0754d1a74882a4ee265b4026abe30bdc
Reviewed-on: https://go-review.googlesource.com/c/go/+/219417
Run-TryBot: Emmanuel Odeke <emm.odeke@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/runtime/crash_cgo_test.go

index 56cfb0856ea86aa601ba5fe50c9e2f6b5f6dc192..a09ecd8e42cde48435d9829a8290c961a5c6e2c4 100644 (file)
@@ -275,7 +275,13 @@ func testCgoPprof(t *testing.T, buildArg, runArg, top, bottom string) {
                t.Fatal(err)
        }
 
-       got, err := testenv.CleanCmdEnv(exec.Command(exe, runArg)).CombinedOutput()
+       // pprofCgoTraceback is called whenever CGO code is executing and a signal
+       // is received. Disable signal preemption to increase the likelihood at
+       // least one SIGPROF signal fired to capture a sample. See issue #37201.
+       cmd := testenv.CleanCmdEnv(exec.Command(exe, runArg))
+       cmd.Env = append(cmd.Env, "GODEBUG=asyncpreemptoff=1")
+
+       got, err := cmd.CombinedOutput()
        if err != nil {
                if testenv.Builder() == "linux-amd64-alpine" {
                        // See Issue 18243 and Issue 19938.