]> Cypherpunks repositories - gostls13.git/commitdiff
sync/atomic: disable GC during TestHammerStoreLoad
authorMichael Anthony Knyszek <mknyszek@google.com>
Thu, 4 Nov 2021 23:13:12 +0000 (23:13 +0000)
committerMichael Knyszek <mknyszek@google.com>
Thu, 4 Nov 2021 23:35:26 +0000 (23:35 +0000)
TestHammerStoreLoad involves a stress test of StorePointer, which has a
write barrier. The "pointer" that is being written is not a real value,
which is generally fine (though not *really* safe) on 64-bit systems
because they never point to an actual object.

On 32-bit systems, however, this is much more likely. Because I can't
figure out how to rewrite the test such that it still is testing the
same conditions but is also using real pointers, just disable the GC
during the test, and make sure there isn't one currently in progress.

Fixes #49362.

Change-Id: If81883fedf06568132e6484f40c820aa69027a9c
Reviewed-on: https://go-review.googlesource.com/c/go/+/361455
Trust: Michael Knyszek <mknyszek@google.com>
Run-TryBot: Michael Knyszek <mknyszek@google.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>

src/sync/atomic/atomic_test.go

index eadc962f70634b12feac91930b44198ae1bb8be8..4b8c2a58f34b446e1bf991a1b822f2c769475177 100644 (file)
@@ -7,6 +7,7 @@ package atomic_test
 import (
        "fmt"
        "runtime"
+       "runtime/debug"
        "strings"
        . "sync/atomic"
        "testing"
@@ -1196,6 +1197,11 @@ func TestHammerStoreLoad(t *testing.T) {
        }
        const procs = 8
        defer runtime.GOMAXPROCS(runtime.GOMAXPROCS(procs))
+       // Disable the GC because hammerStoreLoadPointer invokes
+       // write barriers on values that aren't real pointers.
+       defer debug.SetGCPercent(debug.SetGCPercent(-1))
+       // Ensure any in-progress GC is finished.
+       runtime.GC()
        for _, tt := range tests {
                c := make(chan int)
                var val uint64