diff options
| author | Austin Clements <austin@google.com> | 2018-09-25 15:44:27 -0400 |
|---|---|---|
| committer | Austin Clements <austin@google.com> | 2018-10-09 16:43:18 +0000 |
| commit | 3f86d7cc6762a5f6745cdcda4bd50031bfafc92f (patch) | |
| tree | 82f29ccede14e5e51898c173657b2692962db642 /src | |
| parent | 5440bfc2ea8c0a4c78d5161605659c07ea10e37a (diff) | |
| download | go-3f86d7cc6762a5f6745cdcda4bd50031bfafc92f.tar.xz | |
runtime: tidy mheap.freeSpan
freeSpan currently takes a mysterious "acct int32" argument. This is
really just a boolean and actually just needs to match the "large"
argument to alloc in order to balance out accounting.
To make this clearer, replace acct with a "large bool" argument that
must match the call to mheap.alloc.
Change-Id: Ibc81faefdf9f0583114e1953fcfb362e9c3c76de
Reviewed-on: https://go-review.googlesource.com/c/138655
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Diffstat (limited to 'src')
| -rw-r--r-- | src/runtime/mcentral.go | 2 | ||||
| -rw-r--r-- | src/runtime/mgcsweep.go | 2 | ||||
| -rw-r--r-- | src/runtime/mheap.go | 8 |
3 files changed, 8 insertions, 4 deletions
diff --git a/src/runtime/mcentral.go b/src/runtime/mcentral.go index 9ca8e5d222..baede31405 100644 --- a/src/runtime/mcentral.go +++ b/src/runtime/mcentral.go @@ -244,7 +244,7 @@ func (c *mcentral) freeSpan(s *mspan, preserve bool, wasempty bool) bool { c.nonempty.remove(s) unlock(&c.lock) - mheap_.freeSpan(s, 0) + mheap_.freeSpan(s, false) return true } diff --git a/src/runtime/mgcsweep.go b/src/runtime/mgcsweep.go index 00950aede2..104bd868fa 100644 --- a/src/runtime/mgcsweep.go +++ b/src/runtime/mgcsweep.go @@ -366,7 +366,7 @@ func (s *mspan) sweep(preserve bool) bool { s.limit = 0 // prevent mlookup from finding this span sysFault(unsafe.Pointer(s.base()), size) } else { - mheap_.freeSpan(s, 1) + mheap_.freeSpan(s, true) } c.local_nlargefree++ c.local_largefree += size diff --git a/src/runtime/mheap.go b/src/runtime/mheap.go index 1d672cdf21..48b3f5364a 100644 --- a/src/runtime/mheap.go +++ b/src/runtime/mheap.go @@ -945,7 +945,10 @@ func (h *mheap) grow(npage uintptr) bool { } // Free the span back into the heap. -func (h *mheap) freeSpan(s *mspan, acct int32) { +// +// large must match the value of large passed to mheap.alloc. This is +// used for accounting. +func (h *mheap) freeSpan(s *mspan, large bool) { systemstack(func() { mp := getg().m lock(&h.lock) @@ -959,7 +962,8 @@ func (h *mheap) freeSpan(s *mspan, acct int32) { bytes := s.npages << _PageShift msanfree(base, bytes) } - if acct != 0 { + if large { + // Match accounting done in mheap.alloc. memstats.heap_objects-- } if gcBlackenEnabled != 0 { |
