From: Joe Tsai Date: Wed, 11 May 2016 17:23:37 +0000 (-0700) Subject: cmd/pprof: remove tempDir when no longer needed X-Git-Tag: go1.7beta1~244 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=e9407ae514df7d18e162ce03ebd530fe21aed16d;p=gostls13.git cmd/pprof: remove tempDir when no longer needed The pprof tools properly cleans up all files it creates, but forgets to clean up the temporary directory itself. This CL fixes that. Fixes #13863 Change-Id: I1151c36cdad5ace7cc97e7e04001cf0149ef0f63 Reviewed-on: https://go-review.googlesource.com/23019 Reviewed-by: Brad Fitzpatrick Run-TryBot: Joe Tsai TryBot-Result: Gobot Gobot --- diff --git a/src/cmd/internal/pprof/commands/commands.go b/src/cmd/internal/pprof/commands/commands.go index 5018c02af1..5dfbbd4a5d 100644 --- a/src/cmd/internal/pprof/commands/commands.go +++ b/src/cmd/internal/pprof/commands/commands.go @@ -197,6 +197,7 @@ func makeVizTmpDir() error { if err != nil { return err } + tempfile.DeferDelete(name) vizTmpDir = name return nil } diff --git a/src/cmd/internal/pprof/tempfile/tempfile.go b/src/cmd/internal/pprof/tempfile/tempfile.go index 31c117690a..a5706345e4 100644 --- a/src/cmd/internal/pprof/tempfile/tempfile.go +++ b/src/cmd/internal/pprof/tempfile/tempfile.go @@ -27,18 +27,19 @@ func New(dir, prefix, suffix string) (*os.File, error) { var tempFiles []string var tempFilesMu = sync.Mutex{} -// DeferDelete marks a file to be deleted by next call to Cleanup() +// DeferDelete marks a file or directory to be deleted by next call to Cleanup. func DeferDelete(path string) { tempFilesMu.Lock() tempFiles = append(tempFiles, path) tempFilesMu.Unlock() } -// Cleanup removes any temporary files selected for deferred cleaning. +// Cleanup removes any temporary files or directories selected for deferred cleaning. +// Similar to defer semantics, the nodes are deleted in LIFO order. func Cleanup() { tempFilesMu.Lock() - for _, f := range tempFiles { - os.Remove(f) + for i := len(tempFiles) - 1; i >= 0; i-- { + os.Remove(tempFiles[i]) } tempFiles = nil tempFilesMu.Unlock()