From 1bd3044d489b5864265951b23a04795245d309f7 Mon Sep 17 00:00:00 2001 From: Kostadin Plachkov Date: Mon, 1 Oct 2018 21:13:28 +0300 Subject: [PATCH] fix: data race warning (#1180) --- debug.go | 3 ++- mode.go | 16 +++++++++------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/debug.go b/debug.go index c5e65b22..a5b20626 100644 --- a/debug.go +++ b/debug.go @@ -12,6 +12,7 @@ import ( "runtime" "strconv" "strings" + "sync/atomic" ) const ginSupportMinGoVer = 6 @@ -19,7 +20,7 @@ const ginSupportMinGoVer = 6 // IsDebugging returns true if the framework is running in debug mode. // Use SetMode(gin.ReleaseMode) to disable debug mode. func IsDebugging() bool { - return ginMode == debugCode + return atomic.LoadInt32(&ginMode) == debugCode } // DebugPrintRouteFunc indicates debug log output format. diff --git a/mode.go b/mode.go index 7cb0143a..af7d8b42 100644 --- a/mode.go +++ b/mode.go @@ -7,6 +7,7 @@ package gin import ( "io" "os" + "sync/atomic" "github.com/gin-gonic/gin/binding" ) @@ -38,10 +39,11 @@ const ( var DefaultWriter io.Writer = os.Stdout var DefaultErrorWriter io.Writer = os.Stderr -var ginMode = debugCode -var modeName = DebugMode +var ginMode int32 = debugCode +var modeName atomic.Value func init() { + modeName.Store(DebugMode) mode := os.Getenv(ENV_GIN_MODE) SetMode(mode) } @@ -50,18 +52,18 @@ func init() { func SetMode(value string) { switch value { case DebugMode, "": - ginMode = debugCode + atomic.StoreInt32(&ginMode, debugCode) case ReleaseMode: - ginMode = releaseCode + atomic.StoreInt32(&ginMode, releaseCode) case TestMode: - ginMode = testCode + atomic.StoreInt32(&ginMode, testCode) default: panic("gin mode unknown: " + value) } if value == "" { value = DebugMode } - modeName = value + modeName.Store(value) } // DisableBindValidation closes the default validator. @@ -77,5 +79,5 @@ func EnableJsonDecoderUseNumber() { // Mode returns currently gin mode. func Mode() string { - return modeName + return modeName.Load().(string) }