From 42dd368d319f8829b511e346ff359c5a23a33c46 Mon Sep 17 00:00:00 2001 From: matematik7 Date: Mon, 7 Jun 2021 11:42:15 +0000 Subject: [PATCH] Fix race condition in init by using sync.Once --- defaults.go | 10 +++++++--- factory.go | 10 +++++++--- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/defaults.go b/defaults.go index 3666aba..b25bef6 100644 --- a/defaults.go +++ b/defaults.go @@ -5,6 +5,7 @@ import ( "regexp" "strconv" "strings" + "sync" "time" ) @@ -25,12 +26,15 @@ func SetDefaults(variable interface{}) { getDefaultFiller().Fill(variable) } -var defaultFiller *Filler = nil +var ( + defaultFillerOnce sync.Once + defaultFiller *Filler = nil +) func getDefaultFiller() *Filler { - if defaultFiller == nil { + defaultFillerOnce.Do(func() { defaultFiller = newDefaultFiller() - } + }) return defaultFiller } diff --git a/factory.go b/factory.go index 99f9d27..cdd8f83 100644 --- a/factory.go +++ b/factory.go @@ -5,6 +5,7 @@ import ( "encoding/hex" "math/rand" "reflect" + "sync" "time" ) @@ -12,12 +13,15 @@ func Factory(variable interface{}) { getFactoryFiller().Fill(variable) } -var factoryFiller *Filler = nil +var ( + factoryFillerOnce sync.Once + factoryFiller *Filler = nil +) func getFactoryFiller() *Filler { - if factoryFiller == nil { + factoryFillerOnce.Do(func() { factoryFiller = newFactoryFiller() - } + }) return factoryFiller }