diff --git a/core/breaker/breakers.go b/core/breaker/breakers.go index 6e320521b..e8f2479ed 100644 --- a/core/breaker/breakers.go +++ b/core/breaker/breakers.go @@ -41,10 +41,12 @@ func GetBreaker(name string) Breaker { } lock.Lock() - defer lock.Unlock() - - b = NewBreaker() - breakers[name] = b + b, ok = breakers[name] + if !ok { + b = NewBreaker(WithName(name)) + breakers[name] = b + } + lock.Unlock() return b } @@ -55,20 +57,5 @@ func NoBreakFor(name string) { } func do(name string, execute func(b Breaker) error) error { - lock.RLock() - b, ok := breakers[name] - lock.RUnlock() - if ok { - return execute(b) - } - - lock.Lock() - b, ok = breakers[name] - if !ok { - b = NewBreaker(WithName(name)) - breakers[name] = b - } - lock.Unlock() - - return execute(b) + return execute(GetBreaker(name)) }