Skip to content

Commit

Permalink
runtime: eliminate arbitrary timeout in TestCgoLockOSThreadExit
Browse files Browse the repository at this point in the history
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 golang#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 golang#58247.

Change-Id: I626af52aac55af7a4c0e7829798573c479750c20
Reviewed-on: https://go-review.googlesource.com/c/go/+/464735
Run-TryBot: Bryan Mills <[email protected]>
Reviewed-by: Michael Pratt <[email protected]>
Auto-Submit: Bryan Mills <[email protected]>
TryBot-Result: Gopher Robot <[email protected]>
  • Loading branch information
Bryan C. Mills authored and johanbrandhorst committed Feb 12, 2023
1 parent a0422be commit 3af42a9
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 4 deletions.
5 changes: 4 additions & 1 deletion src/runtime/crash_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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
}
Expand Down
4 changes: 1 addition & 3 deletions src/runtime/testdata/testprogcgo/lockosthread.go
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand All @@ -107,6 +107,4 @@ func LockOSThreadAlt() {
return
}
}
println("sub thread still running")
os.Exit(1)
}

0 comments on commit 3af42a9

Please sign in to comment.