From: Austin Clements Date: Thu, 5 Jan 2023 14:08:25 +0000 (-0500) Subject: runtime/pprof: document possibility of empty stacks X-Git-Tag: go1.20rc3~1^2~9 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=0bbd67e52f;p=gostls13.git runtime/pprof: document possibility of empty stacks I spent quite a while determining the cause of empty stacks in profiles and reasoning out why this is okay. There isn't a great place to record this knowledge, but a documentation comment on appendLocsForStack is better than nothing. Updates #51550. Change-Id: I2eefc6ea31f1af885885c3d96199319f45edb4ce Reviewed-on: https://go-review.googlesource.com/c/go/+/460695 Reviewed-by: Felix Geisendörfer Run-TryBot: Austin Clements TryBot-Result: Gopher Robot Reviewed-by: Michael Pratt --- diff --git a/src/runtime/pprof/proto.go b/src/runtime/pprof/proto.go index 8a49e144b9..b68f30d923 100644 --- a/src/runtime/pprof/proto.go +++ b/src/runtime/pprof/proto.go @@ -395,6 +395,10 @@ func (b *profileBuilder) build() { // location ID slice, locs. The addresses in the stack are return PCs or 1 + the PC of // an inline marker as the runtime traceback function returns. // +// It may return an empty slice even if locs is non-empty, for example if locs consists +// solely of runtime.goexit. We still count these empty stacks in profiles in order to +// get the right cumulative sample count. +// // It may emit to b.pb, so there must be no message encoding in progress. func (b *profileBuilder) appendLocsForStack(locs []uint64, stk []uintptr) (newLocs []uint64) { b.deck.reset()