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) ( func (s *State) SetSettings(ctx context.Context, settings configuration.DNS) (
outcome string) { outcome string) {
s.settingsMu.Lock() s.settingsMu.Lock()
defer s.settingsMu.Unlock()
settingsUnchanged := reflect.DeepEqual(s.settings, settings) settingsUnchanged := reflect.DeepEqual(s.settings, settings)
if settingsUnchanged { if settingsUnchanged {
s.settingsMu.Unlock()
return "settings left unchanged" return "settings left unchanged"
} }
@@ -36,6 +36,7 @@ func (s *State) SetSettings(ctx context.Context, settings configuration.DNS) (
onlyUpdatePeriodChanged := reflect.DeepEqual(tempSettings, settings) onlyUpdatePeriodChanged := reflect.DeepEqual(tempSettings, settings)
s.settings = settings s.settings = settings
s.settingsMu.Unlock()
if onlyUpdatePeriodChanged { if onlyUpdatePeriodChanged {
s.updateTicker <- struct{}{} 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) ( func (s *State) SetSettings(ctx context.Context, settings configuration.OpenVPN) (
outcome string) { outcome string) {
s.settingsMu.Lock() s.settingsMu.Lock()
defer s.settingsMu.Unlock()
settingsUnchanged := reflect.DeepEqual(s.settings, settings) settingsUnchanged := reflect.DeepEqual(s.settings, settings)
if settingsUnchanged { if settingsUnchanged {
s.settingsMu.Unlock()
return "settings left unchanged" return "settings left unchanged"
} }
s.settings = settings s.settings = settings
s.settingsMu.Unlock()
_, _ = s.statusApplier.ApplyStatus(ctx, constants.Stopped) _, _ = s.statusApplier.ApplyStatus(ctx, constants.Stopped)
outcome, _ = s.statusApplier.ApplyStatus(ctx, constants.Running) outcome, _ = s.statusApplier.ApplyStatus(ctx, constants.Running)
return outcome 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) ( func (s *State) SetSettings(ctx context.Context, settings configuration.PublicIP) (
outcome string) { outcome string) {
s.settingsMu.Lock() s.settingsMu.Lock()
defer s.settingsMu.Unlock()
settingsUnchanged := reflect.DeepEqual(s.settings, settings) settingsUnchanged := reflect.DeepEqual(s.settings, settings)
if settingsUnchanged { if settingsUnchanged {
s.settingsMu.Unlock()
return "settings left unchanged" return "settings left unchanged"
} }
periodChanged := s.settings.Period != settings.Period periodChanged := s.settings.Period != settings.Period
s.settings = settings s.settings = settings
s.settingsMu.Unlock()
if periodChanged { if periodChanged {
s.updateTicker <- struct{}{} s.updateTicker <- struct{}{}
// TODO blocking // TODO blocking