diff --git a/main.go b/main.go index a10631eac..961dc106b 100644 --- a/main.go +++ b/main.go @@ -63,6 +63,9 @@ func init() { // Check if minio was compiled using a supported version of Golang. checkGoVersion() + // Set global trace flag. + globalTrace = os.Getenv("MINIO_TRACE") == "1" + // It is an unsafe practice to run network services as // root. Containers are an exception. if !isContainerized() && os.Geteuid() == 0 { @@ -150,31 +153,11 @@ func mustGetProfilePath() string { return filepath.Join(mustGetConfigPath(), globalMinioProfilePath) } -func setupProfilingFromEnv(profiler *interface { - Stop() -}) { - switch os.Getenv("MINIO_PROFILER") { - case "cpu": - *profiler = profile.Start(profile.CPUProfile, profile.ProfilePath(mustGetProfilePath())) - case "mem": - *profiler = profile.Start(profile.MemProfile, profile.ProfilePath(mustGetProfilePath())) - case "block": - *profiler = profile.Start(profile.BlockProfile, profile.ProfilePath(mustGetProfilePath())) - } -} - func main() { - // Set global trace flag. - trace := os.Getenv("MINIO_TRACE") - globalTrace = trace == "1" - probe.Init() // Set project's root source path. probe.SetAppInfo("Release-Tag", minioReleaseTag) probe.SetAppInfo("Commit-ID", minioShortCommitID) - var profiler interface { - Stop() - } app := registerApp() app.Before = func(c *cli.Context) error { // Sets new config folder. @@ -209,21 +192,18 @@ func main() { } } - // Enable profiling supported modes are [cpu, mem, block]. - // ``MINIO_PROFILER`` supported options are [cpu, mem, block]. - setupProfilingFromEnv(&profiler) - - // Return here. return nil } - // Stop profiling on exit. - // N B If any inner function calls os.Exit() the defer(s) stacked wouldn't be called - defer func() { - if profiler != nil { - profiler.Stop() - } - }() + // Enable profiler if ``MINIO_PROFILER`` is set. Supported options are [cpu, mem, block]. + switch os.Getenv("MINIO_PROFILER") { + case "cpu": + defer profile.Start(profile.CPUProfile, profile.ProfilePath(mustGetProfilePath())).Stop() + case "mem": + defer profile.Start(profile.MemProfile, profile.ProfilePath(mustGetProfilePath())).Stop() + case "block": + defer profile.Start(profile.BlockProfile, profile.ProfilePath(mustGetProfilePath())).Stop() + } // Run the app - exit on error. app.RunAndExitOnError()