aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/pprof
diff options
context:
space:
mode:
authorAustin Clements <austin@google.com>2017-05-17 14:27:28 -0400
committerAustin Clements <austin@google.com>2017-05-17 18:58:31 +0000
commitc34add780b65d4c18978a9e490a2db9e4ff22d3a (patch)
tree06fc1faad5178c93a6f472dccbf4dac08dc97b78 /src/runtime/pprof
parent2dc27839df7d51b0544c0ac8b2a0b8f030b7a90c (diff)
downloadgo-c34add780b65d4c18978a9e490a2db9e4ff22d3a.tar.xz
runtime/pprof: don't produce 0 location in count profiles
profileBuilder.locForPC returns 0 to mean "no location" because 0 is an invalid location index. However, the code to build count profiles doesn't check the result of locForPC, so this 0 location index ends up in the profile's location list. This, in turn, causes problems later when we decode the profile because it puts a nil *Location in the sample's location slice, which can later lead to a nil pointer panic. Fix this by making printCountProfile correctly discard the result of locForPC if it returns 0. This makes this call match the other two calls of locForPC. Updates #15156. Change-Id: I4492b3652b513448bc56f4cfece4e37da5e42f94 Reviewed-on: https://go-review.googlesource.com/43630 Reviewed-by: Michael Matloob <matloob@golang.org> Run-TryBot: Austin Clements <austin@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
Diffstat (limited to 'src/runtime/pprof')
-rw-r--r--src/runtime/pprof/pprof.go6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/runtime/pprof/pprof.go b/src/runtime/pprof/pprof.go
index b6253b1aa5..21ea25ce36 100644
--- a/src/runtime/pprof/pprof.go
+++ b/src/runtime/pprof/pprof.go
@@ -401,7 +401,11 @@ func printCountProfile(w io.Writer, debug int, name string, p countProfile) erro
for _, addr := range p.Stack(index[k]) {
// For count profiles, all stack addresses are
// return PCs, which is what locForPC expects.
- locs = append(locs, b.locForPC(addr))
+ l := b.locForPC(addr)
+ if l == 0 { // runtime.goexit
+ continue
+ }
+ locs = append(locs, l)
}
b.pbSample(values, locs, nil)
}