Fix: deadlock for openvpn, dns and publicip loops

This commit is contained in:
Quentin McGaw (desktop)
2021-07-27 14:12:22 +00:00
parent 564cc2b0bc
commit b98f2456c0
3 changed files with 7 additions and 3 deletions

View File

@@ -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{}{}

View File

@@ -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

View File

@@ -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