aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Randall <khr@golang.org>2014-11-06 09:30:41 -0800
committerKeith Randall <khr@golang.org>2014-11-06 09:30:41 -0800
commit5b110c7b08946a2a2810cb4614c078c74645a3d1 (patch)
tree9dc8f34299082aeebe339d6611e74969204ca4db
parent6ad16c4a48accddee2e711b565e9214eae945da4 (diff)
downloadgo-5b110c7b08946a2a2810cb4614c078c74645a3d1.tar.gz
go-5b110c7b08946a2a2810cb4614c078c74645a3d1.zip
runtime: don't stop bitmap dump at BitsDead
Stack bitmaps need to be scanned past any BitsDead entries. Object bitmaps will not have any BitsDead in them (bitmap extraction stops at the first BitsDead entry in makeheapobjbv). data/bss bitmaps also have no BitsDead entries. LGTM=rsc R=rsc CC=golang-codereviews https://golang.org/cl/168270043
-rw-r--r--src/runtime/heapdump.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/runtime/heapdump.c b/src/runtime/heapdump.c
index 94a4bd2be5..eddbc1d1c9 100644
--- a/src/runtime/heapdump.c
+++ b/src/runtime/heapdump.c
@@ -251,7 +251,9 @@ dumpbv(BitVector *bv, uintptr offset)
for(i = 0; i < bv->n; i += BitsPerPointer) {
switch(bv->bytedata[i/8] >> i%8 & 3) {
case BitsDead:
- return;
+ // BitsDead has already been processed in makeheapobjbv.
+ // We should only see it in stack maps, in which case we should continue processing.
+ break;
case BitsScalar:
break;
case BitsPointer: