@@ -52,6 +52,7 @@ func (l *Loop) Run(ctx context.Context, done chan<- struct{}) {
52
52
l .useUnencryptedDNS (fallback )
53
53
}
54
54
l .logAndWait (ctx , err )
55
+ settings = l .GetSettings ()
55
56
}
56
57
57
58
settings = l .GetSettings ()
@@ -62,37 +63,43 @@ func (l *Loop) Run(ctx context.Context, done chan<- struct{}) {
62
63
63
64
l .userTrigger = false
64
65
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 ())
95
91
}
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
96
103
}
97
104
}
98
105
}
0 commit comments