]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: eliminate arbitrary timeout in TestCgoLockOSThreadExit
authorBryan C. Mills <bcmills@google.com>
Thu, 2 Feb 2023 15:09:39 +0000 (10:09 -0500)
committerGopher Robot <gobot@golang.org>
Thu, 2 Feb 2023 20:21:33 +0000 (20:21 +0000)
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 <bcmills@google.com>
Reviewed-by: Michael Pratt <mpratt@google.com>
Auto-Submit: Bryan Mills <bcmills@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>

src/runtime/crash_test.go
src/runtime/testdata/testprogcgo/lockosthread.go

index 309777d6968a3a1e7e9173f6fcc36b6f1ba7e113..a2f09265993cb14967f1b5d5d791d410bbbdc54f 100644 (file)
@@ -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
                }
index 8fcea35f524a862fe4214f8d5eddbf7607cada42..e6dce36fb35dda391bd54a2d824dc7aecbff26cb 100644 (file)
@@ -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)
 }