mirror of
				https://github.com/coredns/coredns.git
				synced 2025-10-31 10:13:14 -04:00 
			
		
		
		
	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:
		| @@ -25,13 +25,11 @@ import ( | ||||
| // the same address and the listener may be stopped for | ||||
| // graceful termination (POSIX only). | ||||
| type Server struct { | ||||
| 	Addr   string // Address we listen on | ||||
| 	mux    *dns.ServeMux | ||||
| 	server [2]*dns.Server // 0 is a net.Listener, 1 is a net.PacketConn (a *UDPConn) in our case. | ||||
| 	Addr string // Address we listen on | ||||
| 	mux  *dns.ServeMux | ||||
|  | ||||
| 	l net.Listener | ||||
| 	p net.PacketConn | ||||
| 	m sync.Mutex // protects listener and packetconn | ||||
| 	server [2]*dns.Server // 0 is a net.Listener, 1 is a net.PacketConn (a *UDPConn) in our case. | ||||
| 	m      sync.Mutex     // protects the servers | ||||
|  | ||||
| 	zones       map[string]*Config // zones keyed by their address | ||||
| 	dnsWg       sync.WaitGroup     // used to wait on outstanding connections | ||||
| @@ -99,9 +97,6 @@ func (s *Server) Listen() (net.Listener, error) { | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	s.m.Lock() | ||||
| 	s.l = l | ||||
| 	s.m.Unlock() | ||||
| 	return l, nil | ||||
| } | ||||
|  | ||||
| @@ -112,9 +107,6 @@ func (s *Server) ListenPacket() (net.PacketConn, error) { | ||||
| 		return nil, err | ||||
| 	} | ||||
|  | ||||
| 	s.m.Lock() | ||||
| 	s.p = p | ||||
| 	s.m.Unlock() | ||||
| 	return p, nil | ||||
| } | ||||
|  | ||||
| @@ -145,13 +137,6 @@ func (s *Server) Stop() (err error) { | ||||
|  | ||||
| 	// Close the listener now; this stops the server without delay | ||||
| 	s.m.Lock() | ||||
| 	if s.l != nil { | ||||
| 		err = s.l.Close() | ||||
| 	} | ||||
| 	if s.p != nil { | ||||
| 		err = s.p.Close() | ||||
| 	} | ||||
|  | ||||
| 	for _, s1 := range s.server { | ||||
| 		// We might not have started and initialized the full set of servers | ||||
| 		if s1 != nil { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user