diff --git a/src/cmd/pprof/internal/commands/commands.go b/src/cmd/pprof/internal/commands/commands.go index 175c7cc99cf..9570cd04404 100644 --- a/src/cmd/pprof/internal/commands/commands.go +++ b/src/cmd/pprof/internal/commands/commands.go @@ -9,6 +9,7 @@ import ( "bytes" "fmt" "io" + "io/ioutil" "os" "os/exec" "runtime" @@ -185,9 +186,26 @@ func saveSVGToFile() PostProcessor { } } +var vizTmpDir string + +func makeVizTmpDir() error { + if vizTmpDir != "" { + return nil + } + name, err := ioutil.TempDir("", "pprof-") + if err != nil { + return err + } + vizTmpDir = name + return nil +} + func invokeVisualizer(interactive **bool, format PostProcessor, suffix string, visualizers []string) PostProcessor { return func(input *bytes.Buffer, output io.Writer, ui plugin.UI) error { - tempFile, err := tempfile.New(os.Getenv("PPROF_TMPDIR"), "pprof", "."+suffix) + if err := makeVizTmpDir(); err != nil { + return err + } + tempFile, err := tempfile.New(vizTmpDir, "pprof", "."+suffix) if err != nil { return err } diff --git a/src/cmd/pprof/internal/driver/driver.go b/src/cmd/pprof/internal/driver/driver.go index 7f345a3bc27..df6a2d18b25 100644 --- a/src/cmd/pprof/internal/driver/driver.go +++ b/src/cmd/pprof/internal/driver/driver.go @@ -894,7 +894,7 @@ var usageMsg = "Output file parameters (for file-based output formats):\n" + " -help This message" var usageMsgVars = "Environment Variables:\n" + - " PPROF_TMPDIR Location for temporary files (default $HOME/pprof)\n" + + " PPROF_TMPDIR Location for saved profiles (default $HOME/pprof)\n" + " PPROF_TOOLS Search path for object-level tools\n" + " PPROF_BINARY_PATH Search path for local binary files\n" + " default: $HOME/pprof/binaries\n" +