Skip to content
Snippets Groups Projects
Commit 75b1cd86 authored by David Cowden's avatar David Cowden
Browse files

server: Hold read lock while iterating on Shutdown

Prevents a panic when a different goroutine untracks a listener or
connection while the server is being shutdown/closed.
parent 674bfd1b
No related branches found
No related tags found
No related merge requests found
......@@ -251,6 +251,8 @@ func (srv *Server) Shutdown() error {
return ErrServerClosed
}
// First call to Shutdown. Stop listen loops:
srv.mu.RLock()
defer srv.mu.RUnlock()
for l := range srv.listeners {
err := l.Close()
if err != nil {
......@@ -302,6 +304,8 @@ func (srv *Server) Close() error {
return ErrServerClosed
}
// First call to Close. Drain connections forcibly:
srv.mu.Lock()
defer srv.mu.Unlock()
for _, c := range srv.connections {
err := c.Close()
if err != nil {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment