]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/pprof: fix EOF handling when getting function source
authorAustin Clements <austin@google.com>
Mon, 17 Nov 2014 19:44:41 +0000 (14:44 -0500)
committerAustin Clements <austin@google.com>
Mon, 17 Nov 2014 19:44:41 +0000 (14:44 -0500)
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

src/cmd/pprof/internal/report/source.go

index 57300dd91a8d4e9a179a0f856c29c0aa08b2b8b7..73ae1b4ea2efadf747beab8629dff90cd7a72acc 100644 (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])