1
0
mirror of https://github.com/golang/go synced 2024-11-23 15:50:07 -07:00

cmd/pprof: fix EOF handling when getting function source

getFunctionSource gathers five lines of "margin" around every
requested sample line.  However, if this margin went past the
end of the source file, getFunctionSource would encounter an
io.EOF error and abort with this error, resulting in listings
like

    (pprof) list main.main
    ROUTINE ======================== main.main in ...
    0      8.33s (flat, cum) 99.17% of Total
    Error: EOF
    (pprof)

Modify the error handling in getFunctionSource so io.EOF is
always considered non-fatal.  If it reaches EOF, it simply
returns the lines it has.

LGTM=bradfitz
R=rsc, bradfitz
CC=golang-codereviews
https://golang.org/cl/172600043
This commit is contained in:
Austin Clements 2014-11-17 14:44:41 -05:00
parent b30d2a856a
commit 38fef031e1

View File

@ -358,9 +358,13 @@ func getFunctionSource(fun, file string, fns nodes, start, end int) (nodes, stri
for {
line, err := buf.ReadString('\n')
if err != nil {
if line == "" || err != io.EOF {
if err != io.EOF {
return nil, file, err
}
if line == "" {
// end was at or past EOF; that's okay
break
}
}
if lineno >= start {
flat, cum := sumNodes(lineNodes[lineno])