Abstract shutdown checking into seperate function (#716)

This commit is contained in:
Tom Thorogood 2018-07-28 22:17:30 +09:30 committed by Miek Gieben
parent 1e845a5b06
commit b559d43c31
1 changed files with 9 additions and 8 deletions

View File

@ -315,6 +315,13 @@ type Server struct {
started bool
}
func (srv *Server) isStarted() bool {
srv.lock.RLock()
started := srv.started
srv.lock.RUnlock()
return started
}
func (srv *Server) worker(w *response) {
srv.serve(w)
@ -512,12 +519,9 @@ func (srv *Server) serveTCP(l net.Listener) error {
for {
rw, err := l.Accept()
srv.lock.RLock()
if !srv.started {
srv.lock.RUnlock()
if !srv.isStarted() {
return nil
}
srv.lock.RUnlock()
if err != nil {
if neterr, ok := err.(net.Error); ok && neterr.Temporary() {
continue
@ -545,12 +549,9 @@ func (srv *Server) serveUDP(l *net.UDPConn) error {
// deadline is not used here
for {
m, s, err := reader.ReadUDP(l, rtimeout)
srv.lock.RLock()
if !srv.started {
srv.lock.RUnlock()
if !srv.isStarted() {
return nil
}
srv.lock.RUnlock()
if err != nil {
if netErr, ok := err.(net.Error); ok && netErr.Temporary() {
continue