aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/malloc_test.go
diff options
context:
space:
mode:
authorAustin Clements <austin@google.com>2021-11-22 15:33:01 -0500
committerAustin Clements <austin@google.com>2021-11-29 19:45:58 +0000
commitf598e2962d3a358b59faa68471b6ed378fc68806 (patch)
tree796f6a3fddbb2b85db17bffa8ca68c663b73a5ab /src/runtime/malloc_test.go
parent61ff5019687c125910c48c22d672a9b6985ee61e (diff)
downloadgo-f598e2962d3a358b59faa68471b6ed378fc68806.tar.xz
runtime: fix preemption sensitivity in TestTinyAllocIssue37262
TestTinyAllocIssue37262 assumes that all of its allocations will come from the same tiny allocator (that is, the same P), and that nothing else will allocate from that tiny allocator while it's running. It can fail incorrectly if these assumptions aren't met. Fix this potential test flakiness by disabling preemption during this test. As far as I know, this has never happened on the builders. It was found by mayMoreStackPreempt. Change-Id: I59f993e0bdbf46a9add842d0e278415422c3f804 Reviewed-on: https://go-review.googlesource.com/c/go/+/366994 Trust: Austin Clements <austin@google.com> Run-TryBot: Austin Clements <austin@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org> Reviewed-by: Michael Knyszek <mknyszek@google.com>
Diffstat (limited to 'src/runtime/malloc_test.go')
-rw-r--r--src/runtime/malloc_test.go7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/runtime/malloc_test.go b/src/runtime/malloc_test.go
index e028554b23..757f945393 100644
--- a/src/runtime/malloc_test.go
+++ b/src/runtime/malloc_test.go
@@ -198,6 +198,10 @@ func TestTinyAllocIssue37262(t *testing.T) {
runtime.GC()
runtime.GC()
+ // Disable preemption so we stay on one P's tiny allocator and
+ // nothing else allocates from it.
+ runtime.Acquirem()
+
// Make 1-byte allocations until we get a fresh tiny slot.
aligned := false
for i := 0; i < 16; i++ {
@@ -208,6 +212,7 @@ func TestTinyAllocIssue37262(t *testing.T) {
}
}
if !aligned {
+ runtime.Releasem()
t.Fatal("unable to get a fresh tiny slot")
}
@@ -229,6 +234,8 @@ func TestTinyAllocIssue37262(t *testing.T) {
tinyByteSink = nil
tinyUint32Sink = nil
tinyObj12Sink = nil
+
+ runtime.Releasem()
}
func TestPageCacheLeak(t *testing.T) {