Commit bcd9c8b0 authored by Miek Gieben's avatar Miek Gieben Committed by GitHub

server: fix data race (#536)

* server: fix data race

This fixes the detected race.

Fixes #534

* Remove the listener and packetconn from Server

There does not seem a need to store the listener and packetconn again
in the Server structure. The dns.Servers already has access to them
and can also shutdown the handlers.
parent 5aa30308
...@@ -27,11 +27,9 @@ import ( ...@@ -27,11 +27,9 @@ import (
type Server struct { type Server struct {
Addr string // Address we listen on Addr string // Address we listen on
mux *dns.ServeMux mux *dns.ServeMux
server [2]*dns.Server // 0 is a net.Listener, 1 is a net.PacketConn (a *UDPConn) in our case.
l net.Listener server [2]*dns.Server // 0 is a net.Listener, 1 is a net.PacketConn (a *UDPConn) in our case.
p net.PacketConn m sync.Mutex // protects the servers
m sync.Mutex // protects listener and packetconn
zones map[string]*Config // zones keyed by their address zones map[string]*Config // zones keyed by their address
dnsWg sync.WaitGroup // used to wait on outstanding connections dnsWg sync.WaitGroup // used to wait on outstanding connections
...@@ -99,9 +97,6 @@ func (s *Server) Listen() (net.Listener, error) { ...@@ -99,9 +97,6 @@ func (s *Server) Listen() (net.Listener, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} }
s.m.Lock()
s.l = l
s.m.Unlock()
return l, nil return l, nil
} }
...@@ -112,9 +107,6 @@ func (s *Server) ListenPacket() (net.PacketConn, error) { ...@@ -112,9 +107,6 @@ func (s *Server) ListenPacket() (net.PacketConn, error) {
return nil, err return nil, err
} }
s.m.Lock()
s.p = p
s.m.Unlock()
return p, nil return p, nil
} }
...@@ -145,13 +137,6 @@ func (s *Server) Stop() (err error) { ...@@ -145,13 +137,6 @@ func (s *Server) Stop() (err error) {
// Close the listener now; this stops the server without delay // Close the listener now; this stops the server without delay
s.m.Lock() s.m.Lock()
if s.l != nil {
err = s.l.Close()
}
if s.p != nil {
err = s.p.Close()
}
for _, s1 := range s.server { for _, s1 := range s.server {
// We might not have started and initialized the full set of servers // We might not have started and initialized the full set of servers
if s1 != nil { if s1 != nil {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment