Split part of DNSServer.Start() to a separate ActivateAndServe()
Specifically, move the part that blocks, and call that as necessary. This means Start() can run on the caller's goroutine and avoid race conditions.
This commit is contained in:
1 parent
1b57a24789
commit
9636675c2c
4 files changed
+19
-6
No files matched your search
@@ -218,7 +218,10 @@ func (s *DNSServer) Start() error {
|
||||
s.tcpSrv = &dns.Server{Listener: l, Handler: s.createMux(protTCP), ReadTimeout: s.readTimeout}
|
||||
|
||||
s.listenersWg.Add(2)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *DNSServer) ActivateAndServe() {
|
||||
go func() {
|
||||
defer s.listenersWg.Done()
|
||||
|
||||
@@ -241,7 +244,6 @@ func (s *DNSServer) Start() error {
|
||||
s.listenersWg.Wait()
|
||||
|
||||
Info.Printf("[dns] Server exiting...")
|
||||
return nil
|
||||
}
|
||||
|
||||
// Return status string
|
||||
|
||||
@@ -69,7 +69,9 @@ func TestServerDbCacheInvalidation(t *testing.T) {
|
||||
MaxAnswers: 4,
|
||||
})
|
||||
wt.AssertNoErr(t, err)
|
||||
go srv.Start()
|
||||
err = srv.Start()
|
||||
wt.AssertNoErr(t, err)
|
||||
go srv.ActivateAndServe()
|
||||
defer srv.Stop()
|
||||
time.Sleep(100 * time.Millisecond) // Allow server goroutine to start
|
||||
|
||||
@@ -202,7 +204,9 @@ func TestServerCacheExpiration(t *testing.T) {
|
||||
CacheNegLocalTTL: negativeLocalTTL,
|
||||
})
|
||||
wt.AssertNoErr(t, err)
|
||||
go srv.Start()
|
||||
err = srv.Start()
|
||||
wt.AssertNoErr(t, err)
|
||||
go srv.ActivateAndServe()
|
||||
defer srv.Stop()
|
||||
time.Sleep(100 * time.Millisecond) // Allow server goroutine to start
|
||||
|
||||
@@ -287,7 +291,9 @@ func TestServerCacheRefresh(t *testing.T) {
|
||||
MaxAnswers: 4,
|
||||
})
|
||||
wt.AssertNoErr(t, err)
|
||||
go srv.Start()
|
||||
err = srv.Start()
|
||||
wt.AssertNoErr(t, err)
|
||||
go srv.ActivateAndServe()
|
||||
defer srv.Stop()
|
||||
time.Sleep(100 * time.Millisecond) // Allow sever goroutine to start
|
||||
|
||||
|
||||
@@ -89,7 +89,9 @@ func TestUDPDNSServer(t *testing.T) {
|
||||
ListenReadTimeout: testSocketTimeout,
|
||||
})
|
||||
wt.AssertNoErr(t, err)
|
||||
go srv.Start()
|
||||
err = srv.Start()
|
||||
wt.AssertNoErr(t, err)
|
||||
go srv.ActivateAndServe()
|
||||
defer srv.Stop()
|
||||
time.Sleep(100 * time.Millisecond) // Allow sever goroutine to start
|
||||
|
||||
@@ -195,7 +197,9 @@ func TestTCPDNSServer(t *testing.T) {
|
||||
ListenReadTimeout: testSocketTimeout,
|
||||
})
|
||||
wt.AssertNoErr(t, err)
|
||||
go srv.Start()
|
||||
err = srv.Start()
|
||||
wt.AssertNoErr(t, err)
|
||||
go srv.ActivateAndServe()
|
||||
defer srv.Stop()
|
||||
time.Sleep(100 * time.Millisecond) // Allow sever goroutine to start
|
||||
|
||||
|
||||
@@ -182,4 +182,5 @@ func main() {
|
||||
if err != nil {
|
||||
Error.Fatal("[main] Failed to start the WeaveDNS server: ", err)
|
||||
}
|
||||
srv.ActivateAndServe()
|
||||
}
|
||||
Reference in new issue
Block a user