]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: disable GC around TestGoroutineParallelism
authorAustin Clements <austin@google.com>
Tue, 26 May 2015 18:32:24 +0000 (14:32 -0400)
committerAustin Clements <austin@google.com>
Thu, 28 May 2015 17:40:19 +0000 (17:40 +0000)
TestGoroutineParallelism can deadlock if the GC runs during the
test. Currently it tries to prevent this by forcing a GC before the
test, but this is best effort and fails completely if GOGC is very low
for testing.

This change replaces this best-effort fix with simply setting GOGC to
off for the duration of the test.

Change-Id: I8229310833f241b149ebcd32845870c1cb14e9f8
Reviewed-on: https://go-review.googlesource.com/10454
Reviewed-by: Russ Cox <rsc@golang.org>
src/runtime/proc_test.go

index 4c5712d32f6390c09e91c3356006c49fea787107..4471ee5afbbb752b103150a05db2424ed21f3d46 100644 (file)
@@ -7,6 +7,7 @@ package runtime_test
 import (
        "math"
        "runtime"
+       "runtime/debug"
        "sync"
        "sync/atomic"
        "syscall"
@@ -104,8 +105,8 @@ func TestGoroutineParallelism(t *testing.T) {
        defer runtime.GOMAXPROCS(runtime.GOMAXPROCS(P))
        // If runtime triggers a forced GC during this test then it will deadlock,
        // since the goroutines can't be stopped/preempted.
-       // So give this test as much time as possible.
-       runtime.GC()
+       // Disable GC for this test (see issue #10958).
+       defer debug.SetGCPercent(debug.SetGCPercent(-1))
        for try := 0; try < N; try++ {
                done := make(chan bool)
                x := uint32(0)