aboutsummaryrefslogtreecommitdiff
path: root/libgo/go/runtime/mstats.go
diff options
context:
space:
mode:
Diffstat (limited to 'libgo/go/runtime/mstats.go')
-rw-r--r--libgo/go/runtime/mstats.go11
1 files changed, 7 insertions, 4 deletions
diff --git a/libgo/go/runtime/mstats.go b/libgo/go/runtime/mstats.go
index 2d4cdbe..4e2c66ce 100644
--- a/libgo/go/runtime/mstats.go
+++ b/libgo/go/runtime/mstats.go
@@ -513,6 +513,12 @@ func readGCStats_m(pauses *[]uint64) {
//go:nowritebarrier
func updatememstats() {
+ // Flush mcaches to mcentral before doing anything else.
+ //
+ // Flushing to the mcentral may in general cause stats to
+ // change as mcentral data structures are manipulated.
+ systemstack(flushallmcaches)
+
memstats.mcache_inuse = uint64(mheap_.cachealloc.inuse)
memstats.mspan_inuse = uint64(mheap_.spanalloc.inuse)
memstats.sys = memstats.heap_sys + memstats.stacks_sys + memstats.mspan_sys +
@@ -523,7 +529,7 @@ func updatememstats() {
// Calculate memory allocator stats.
// During program execution we only count number of frees and amount of freed memory.
- // Current number of alive object in the heap and amount of alive heap memory
+ // Current number of alive objects in the heap and amount of alive heap memory
// are calculated by scanning all spans.
// Total number of mallocs is calculated as number of frees plus number of alive objects.
// Similarly, total amount of allocated memory is calculated as amount of freed memory
@@ -537,9 +543,6 @@ func updatememstats() {
memstats.by_size[i].nfree = 0
}
- // Flush mcache's to mcentral.
- systemstack(flushallmcaches)
-
// Aggregate local stats.
cachestats()