]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: disable TestArenaCollision on Darwin in race mode
authorMichael Anthony Knyszek <mknyszek@google.com>
Wed, 19 Dec 2018 17:32:22 +0000 (17:32 +0000)
committerMichael Knyszek <mknyszek@google.com>
Wed, 19 Dec 2018 19:34:50 +0000 (19:34 +0000)
This change disables the test TestArenaCollision on Darwin in race mode
to deal with the fact that Darwin 10.10 must use MAP_FIXED in race mode
to ensure we retain our heap in a particular portion of the address
space which the race detector needs. The test specifically checks to
make sure a manually mapped region's space isn't re-used, which is
definitely possible with MAP_FIXED because it replaces whatever mapping
already exists at a given address.

This change then also makes it so that MAP_FIXED is only used in race
mode and on Darwin, not all BSDs, because using MAP_FIXED breaks this
test for FreeBSD in addition to Darwin.

Updates #26475.
Fixes #29340.

Change-Id: I1c59349408ccd7eeb30c4bf2593f48316b23ab2f
Reviewed-on: https://go-review.googlesource.com/c/155097
Run-TryBot: Michael Knyszek <mknyszek@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/runtime/malloc_test.go
src/runtime/mem_bsd.go

index f25bfa48aff029b638e41683bf8be9fb1b0517bd..a2d5864d3d4729cdbd108d3f3a73619e6da442a3 100644 (file)
@@ -183,6 +183,14 @@ type acLink struct {
 var arenaCollisionSink []*acLink
 
 func TestArenaCollision(t *testing.T) {
+       if GOOS == "darwin" && race.Enabled {
+               // Skip this test on Darwin in race mode because Darwin 10.10 has
+               // issues following arena hints and runs out of them in race mode, so
+               // MAP_FIXED is used to ensure we keep the heap in the memory region the
+               // race detector expects.
+               // TODO(mknyszek): Delete this when Darwin 10.10 is no longer supported.
+               t.Skip("disabled on Darwin with race mode since MAP_FIXED is used")
+       }
        testenv.MustHaveExec(t)
 
        // Test that mheap.sysAlloc handles collisions with other
index bf2d99678b99e38b939c68ec9e1ac1b671bea6bf..84238d7279fb5d40355fbb182649a02adc8dbc8e 100644 (file)
@@ -43,7 +43,7 @@ func sysFault(v unsafe.Pointer, n uintptr) {
 
 func sysReserve(v unsafe.Pointer, n uintptr) unsafe.Pointer {
        flags := int32(_MAP_ANON | _MAP_PRIVATE)
-       if raceenabled {
+       if raceenabled && GOOS == "darwin" {
                // Currently the race detector expects memory to live within a certain
                // range, and on Darwin 10.10 mmap is prone to ignoring hints, moreso
                // than later versions and other BSDs (#26475). So, even though it's