Skip to content

Commit df84b55

Browse files
committed
Fix dns loop complexity
1 parent 83f0682 commit df84b55

File tree

1 file changed

+37
-30
lines changed

1 file changed

+37
-30
lines changed

internal/dns/run.go

+37-30
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ func (l *Loop) Run(ctx context.Context, done chan<- struct{}) {
5252
l.useUnencryptedDNS(fallback)
5353
}
5454
l.logAndWait(ctx, err)
55+
settings = l.GetSettings()
5556
}
5657

5758
settings = l.GetSettings()
@@ -62,37 +63,43 @@ func (l *Loop) Run(ctx context.Context, done chan<- struct{}) {
6263

6364
l.userTrigger = false
6465

65-
stayHere := true
66-
for stayHere {
67-
select {
68-
case <-ctx.Done():
69-
stopErr := l.server.Stop()
70-
if stopErr != nil {
71-
l.logger.Error("stopping DoT server: " + stopErr.Error())
72-
}
73-
// TODO revert OS and Go nameserver when exiting
74-
return
75-
case <-l.stop:
76-
l.userTrigger = true
77-
l.logger.Info("stopping")
78-
const fallback = false
79-
l.useUnencryptedDNS(fallback)
80-
err := l.server.Stop()
81-
if err != nil {
82-
l.logger.Error("stopping DoT server: " + err.Error())
83-
}
84-
l.stopped <- struct{}{}
85-
case <-l.start:
86-
l.userTrigger = true
87-
l.logger.Info("starting")
88-
stayHere = false
89-
case err := <-runError: // unexpected error
90-
l.statusManager.SetStatus(constants.Crashed)
91-
const fallback = true
92-
l.useUnencryptedDNS(fallback)
93-
l.logAndWait(ctx, err)
94-
stayHere = false
66+
exitLoop := l.runWait(ctx, runError)
67+
if exitLoop {
68+
return
69+
}
70+
}
71+
}
72+
73+
func (l *Loop) runWait(ctx context.Context, runError <-chan error) (exitLoop bool) {
74+
for {
75+
select {
76+
case <-ctx.Done():
77+
stopErr := l.server.Stop()
78+
if stopErr != nil {
79+
l.logger.Error("stopping DoT server: " + stopErr.Error())
80+
}
81+
// TODO revert OS and Go nameserver when exiting
82+
return true
83+
case <-l.stop:
84+
l.userTrigger = true
85+
l.logger.Info("stopping")
86+
const fallback = false
87+
l.useUnencryptedDNS(fallback)
88+
err := l.server.Stop()
89+
if err != nil {
90+
l.logger.Error("stopping DoT server: " + err.Error())
9591
}
92+
l.stopped <- struct{}{}
93+
case <-l.start:
94+
l.userTrigger = true
95+
l.logger.Info("starting")
96+
return false
97+
case err := <-runError: // unexpected error
98+
l.statusManager.SetStatus(constants.Crashed)
99+
const fallback = true
100+
l.useUnencryptedDNS(fallback)
101+
l.logAndWait(ctx, err)
102+
return false
96103
}
97104
}
98105
}

0 commit comments

Comments
 (0)