diff options
Diffstat (limited to 'src/runtime')
| -rw-r--r-- | src/runtime/debug/garbage_test.go | 4 | ||||
| -rw-r--r-- | src/runtime/mheap.go | 9 |
2 files changed, 13 insertions, 0 deletions
diff --git a/src/runtime/debug/garbage_test.go b/src/runtime/debug/garbage_test.go index 54c33bd4f3..a392614b1f 100644 --- a/src/runtime/debug/garbage_test.go +++ b/src/runtime/debug/garbage_test.go @@ -88,6 +88,10 @@ func TestReadGCStats(t *testing.T) { var big = make([]byte, 1<<20) func TestFreeOSMemory(t *testing.T) { + switch runtime.GOARCH { + case "ppc64", "ppc64le", "nacl": + t.Skip("issue 9993; scavenger temporarily disabled on systems with 64k pages") + } var ms1, ms2 runtime.MemStats if big == nil { diff --git a/src/runtime/mheap.go b/src/runtime/mheap.go index a05a570ff1..94ef4de56a 100644 --- a/src/runtime/mheap.go +++ b/src/runtime/mheap.go @@ -717,6 +717,15 @@ func mHeap_FreeSpanLocked(h *mheap, s *mspan, acctinuse, acctidle bool, unusedsi } func scavengelist(list *mspan, now, limit uint64) uintptr { + if _PhysPageSize > _PageSize { + // golang.org/issue/9993 + // If the physical page size of the machine is larger than + // our logical heap page size the kernel may round up the + // amount to be freed to its page size and corrupt the heap + // pages surrounding the unused block. + return 0 + } + if mSpanList_IsEmpty(list) { return 0 } |
