From 899076a06ad71bce2ad6de1b97b06440189aad62 Mon Sep 17 00:00:00 2001 From: Caleb Doxsey Date: Tue, 2 Feb 2021 16:19:33 -0700 Subject: [PATCH] fix data race (#1851) --- config/config_source.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/config/config_source.go b/config/config_source.go index 7e5f90b1b..535e3e83d 100644 --- a/config/config_source.go +++ b/config/config_source.go @@ -44,6 +44,7 @@ type Source interface { // A StaticSource always returns the same config. Useful for testing. type StaticSource struct { + mu sync.Mutex cfg *Config lis []ChangeListener } @@ -55,11 +56,17 @@ func NewStaticSource(cfg *Config) *StaticSource { // GetConfig gets the config. func (src *StaticSource) GetConfig() *Config { + src.mu.Lock() + defer src.mu.Unlock() + return src.cfg } // SetConfig sets the config. func (src *StaticSource) SetConfig(cfg *Config) { + src.mu.Lock() + defer src.mu.Unlock() + src.cfg = cfg for _, li := range src.lis { li(cfg) @@ -68,6 +75,9 @@ func (src *StaticSource) SetConfig(cfg *Config) { // OnConfigChange is ignored for the StaticSource. func (src *StaticSource) OnConfigChange(li ChangeListener) { + src.mu.Lock() + defer src.mu.Unlock() + src.lis = append(src.lis, li) }