diff --git a/internal/dns/state/settings.go b/internal/dns/state/settings.go index cac90243..5f3a6387 100644 --- a/internal/dns/state/settings.go +++ b/internal/dns/state/settings.go @@ -23,10 +23,10 @@ func (s *State) GetSettings() (settings configuration.DNS) { func (s *State) SetSettings(ctx context.Context, settings configuration.DNS) ( outcome string) { s.settingsMu.Lock() - defer s.settingsMu.Unlock() settingsUnchanged := reflect.DeepEqual(s.settings, settings) if settingsUnchanged { + s.settingsMu.Unlock() return "settings left unchanged" } @@ -36,6 +36,7 @@ func (s *State) SetSettings(ctx context.Context, settings configuration.DNS) ( onlyUpdatePeriodChanged := reflect.DeepEqual(tempSettings, settings) s.settings = settings + s.settingsMu.Unlock() if onlyUpdatePeriodChanged { s.updateTicker <- struct{}{} diff --git a/internal/openvpn/state/settings.go b/internal/openvpn/state/settings.go index 7409efd7..d4694419 100644 --- a/internal/openvpn/state/settings.go +++ b/internal/openvpn/state/settings.go @@ -23,12 +23,13 @@ func (s *State) GetSettings() (settings configuration.OpenVPN) { func (s *State) SetSettings(ctx context.Context, settings configuration.OpenVPN) ( outcome string) { s.settingsMu.Lock() - defer s.settingsMu.Unlock() settingsUnchanged := reflect.DeepEqual(s.settings, settings) if settingsUnchanged { + s.settingsMu.Unlock() return "settings left unchanged" } s.settings = settings + s.settingsMu.Unlock() _, _ = s.statusApplier.ApplyStatus(ctx, constants.Stopped) outcome, _ = s.statusApplier.ApplyStatus(ctx, constants.Running) return outcome diff --git a/internal/publicip/state/settings.go b/internal/publicip/state/settings.go index 1ec6a782..5df81ccb 100644 --- a/internal/publicip/state/settings.go +++ b/internal/publicip/state/settings.go @@ -22,15 +22,17 @@ func (s *State) GetSettings() (settings configuration.PublicIP) { func (s *State) SetSettings(ctx context.Context, settings configuration.PublicIP) ( outcome string) { s.settingsMu.Lock() - defer s.settingsMu.Unlock() settingsUnchanged := reflect.DeepEqual(s.settings, settings) if settingsUnchanged { + s.settingsMu.Unlock() return "settings left unchanged" } periodChanged := s.settings.Period != settings.Period s.settings = settings + s.settingsMu.Unlock() + if periodChanged { s.updateTicker <- struct{}{} // TODO blocking