From fc86770d87360ddf0346bf407a80935fe2dddec8 Mon Sep 17 00:00:00 2001 From: "Bryan C. Mills" Date: Thu, 2 Feb 2023 10:09:39 -0500 Subject: [PATCH] runtime: eliminate arbitrary timeout in TestCgoLockOSThreadExit This test previously failed if running a new pthread took longer than a hard-coded 100ms. On some slow or heavily-loaded builders, that scheduling latency is too short. Since the point of this test is to verify that the background thread is not reused after it terminates (see #20395), the arbitrary time limit does not seem helpful: if the background thread fails to terminate the test will time out on its own, and if the main goroutine is scheduled on the background thread the test will fail regardless of how long it takes. Fixes #58247. Change-Id: I626af52aac55af7a4c0e7829798573c479750c20 Reviewed-on: https://go-review.googlesource.com/c/go/+/464735 Run-TryBot: Bryan Mills Reviewed-by: Michael Pratt Auto-Submit: Bryan Mills TryBot-Result: Gopher Robot --- src/runtime/crash_test.go | 5 ++++- src/runtime/testdata/testprogcgo/lockosthread.go | 4 +--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/runtime/crash_test.go b/src/runtime/crash_test.go index 309777d6968..a2f09265993 100644 --- a/src/runtime/crash_test.go +++ b/src/runtime/crash_test.go @@ -49,6 +49,7 @@ func runTestProg(t *testing.T, binary, name string, env ...string) string { } testenv.MustHaveGoBuild(t) + t.Helper() exe, err := buildTestProg(t, binary) if err != nil { @@ -135,13 +136,15 @@ func buildTestProg(t *testing.T, binary string, flags ...string) (string, error) exe := filepath.Join(dir, name+".exe") - t.Logf("running go build -o %s %s", exe, strings.Join(flags, " ")) + start := time.Now() cmd := exec.Command(testenv.GoToolPath(t), append([]string{"build", "-o", exe}, flags...)...) + t.Logf("running %v", cmd) cmd.Dir = "testdata/" + binary out, err := testenv.CleanCmdEnv(cmd).CombinedOutput() if err != nil { target.err = fmt.Errorf("building %s %v: %v\n%s", binary, flags, err, out) } else { + t.Logf("built %v in %v", name, time.Since(start)) target.exe = exe target.err = nil } diff --git a/src/runtime/testdata/testprogcgo/lockosthread.go b/src/runtime/testdata/testprogcgo/lockosthread.go index 8fcea35f524..e6dce36fb35 100644 --- a/src/runtime/testdata/testprogcgo/lockosthread.go +++ b/src/runtime/testdata/testprogcgo/lockosthread.go @@ -94,7 +94,7 @@ func LockOSThreadAlt() { // Exit with the thread locked. }() <-ready - for i := 0; i < 100; i++ { + for { time.Sleep(1 * time.Millisecond) // Check that this goroutine is running on a different thread. self := C.pthread_self() @@ -107,6 +107,4 @@ func LockOSThreadAlt() { return } } - println("sub thread still running") - os.Exit(1) }