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.
This commit is contained in:
parent
5aa30308d9
commit
bcd9c8b0fb
1 changed files with 4 additions and 19 deletions
|
@ -25,13 +25,11 @@ import (
|
||||||
// the same address and the listener may be stopped for
|
// the same address and the listener may be stopped for
|
||||||
// graceful termination (POSIX only).
|
// graceful termination (POSIX only).
|
||||||
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) {
|
||||||
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) {
|
||||||
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) {
|
||||||
|
|
||||||
// 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 {
|
||||||
|
|
Loading…
Add table
Reference in a new issue