From 7755c3e74cb99d8d51cc6a20257c37ba6972fd1b Mon Sep 17 00:00:00 2001 From: Jeremy Date: Tue, 19 Nov 2019 17:03:46 +0800 Subject: [PATCH] bug fix register.go fix data race because of register solve issue https://github.com/crawlab-team/crawlab/issues/308 --- backend/services/register/register.go | 41 ++++++++++++++++----------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/backend/services/register/register.go b/backend/services/register/register.go index ccd8b67d..ed4e1891 100644 --- a/backend/services/register/register.go +++ b/backend/services/register/register.go @@ -6,6 +6,7 @@ import ( "net" "reflect" "runtime/debug" + "sync" ) type Register interface { @@ -97,25 +98,31 @@ func getMac() (string, error) { var register Register // 获得注册器 -func GetRegister() Register { - if register != nil { - return register - } +var once sync.Once - registerType := viper.GetString("server.register.type") - if registerType == "mac" { - register = &MacRegister{} - } else { - ip := viper.GetString("server.register.ip") - if ip == "" { - log.Error("server.register.ip is empty") - debug.PrintStack() - return nil +func GetRegister() Register { + once.Do(func() { + + if register != nil { + register = register } - register = &IpRegister{ - Ip: ip, + + registerType := viper.GetString("server.register.type") + if registerType == "mac" { + register = &MacRegister{} + } else { + ip := viper.GetString("server.register.ip") + if ip == "" { + log.Error("server.register.ip is empty") + debug.PrintStack() + register = nil + } + register = &IpRegister{ + Ip: ip, + } } - } - log.Info("register type is :" + reflect.TypeOf(register).String()) + log.Info("register type is :" + reflect.TypeOf(register).String()) + + }) return register }