diff options
| author | Austin Clements <austin@google.com> | 2017-05-17 14:27:28 -0400 |
|---|---|---|
| committer | Austin Clements <austin@google.com> | 2017-05-17 18:58:31 +0000 |
| commit | c34add780b65d4c18978a9e490a2db9e4ff22d3a (patch) | |
| tree | 06fc1faad5178c93a6f472dccbf4dac08dc97b78 /src/runtime/pprof | |
| parent | 2dc27839df7d51b0544c0ac8b2a0b8f030b7a90c (diff) | |
| download | go-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.go | 6 |
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) } |
