aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/traceallocfree.go
diff options
context:
space:
mode:
authorMichael Anthony Knyszek <mknyszek@google.com>2024-05-20 20:18:02 +0000
committerGopher Robot <gobot@golang.org>2024-05-22 19:18:09 +0000
commit197101a84a563ee8fb6ac58bb91ab2de49f0cbce (patch)
tree02e286fd21853b94910b6c8907be58fdaa968fb6 /src/runtime/traceallocfree.go
parent5ab8f90745efee77cae39f4ba9547298977fcc65 (diff)
downloadgo-197101a84a563ee8fb6ac58bb91ab2de49f0cbce.tar.xz
runtime: correctly account for allocated objects in allocfree trace
The current implementation doesn't handle s.freeindex at all, which means it'll skip a whole bunch of recently-made allocations, because the span may have not been swept yet. Change-Id: I8c5e360f5927ffe7e9abb448b352a59875e31b02 Reviewed-on: https://go-review.googlesource.com/c/go/+/586996 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Auto-Submit: Michael Knyszek <mknyszek@google.com> Reviewed-by: Michael Pratt <mpratt@google.com>
Diffstat (limited to 'src/runtime/traceallocfree.go')
-rw-r--r--src/runtime/traceallocfree.go7
1 files changed, 3 insertions, 4 deletions
diff --git a/src/runtime/traceallocfree.go b/src/runtime/traceallocfree.go
index e1190394ed..3067e16670 100644
--- a/src/runtime/traceallocfree.go
+++ b/src/runtime/traceallocfree.go
@@ -45,11 +45,10 @@ func traceSnapshotMemory() {
// Find all allocated objects.
abits := s.allocBitsForIndex(0)
for i := uintptr(0); i < uintptr(s.nelems); i++ {
- if !abits.isMarked() {
- continue
+ if abits.index < uintptr(s.freeindex) || abits.isMarked() {
+ x := s.base() + i*s.elemsize
+ trace.HeapObjectExists(x, s.typePointersOfUnchecked(x).typ)
}
- x := s.base() + i*s.elemsize
- trace.HeapObjectExists(x, s.typePointersOfUnchecked(x).typ)
abits.advance()
}
}