Abstract shutdown checking into seperate function (#716)
This commit is contained in:
parent
1e845a5b06
commit
b559d43c31
17
server.go
17
server.go
|
@ -315,6 +315,13 @@ type Server struct {
|
||||||
started bool
|
started bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (srv *Server) isStarted() bool {
|
||||||
|
srv.lock.RLock()
|
||||||
|
started := srv.started
|
||||||
|
srv.lock.RUnlock()
|
||||||
|
return started
|
||||||
|
}
|
||||||
|
|
||||||
func (srv *Server) worker(w *response) {
|
func (srv *Server) worker(w *response) {
|
||||||
srv.serve(w)
|
srv.serve(w)
|
||||||
|
|
||||||
|
@ -512,12 +519,9 @@ func (srv *Server) serveTCP(l net.Listener) error {
|
||||||
|
|
||||||
for {
|
for {
|
||||||
rw, err := l.Accept()
|
rw, err := l.Accept()
|
||||||
srv.lock.RLock()
|
if !srv.isStarted() {
|
||||||
if !srv.started {
|
|
||||||
srv.lock.RUnlock()
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
srv.lock.RUnlock()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if neterr, ok := err.(net.Error); ok && neterr.Temporary() {
|
if neterr, ok := err.(net.Error); ok && neterr.Temporary() {
|
||||||
continue
|
continue
|
||||||
|
@ -545,12 +549,9 @@ func (srv *Server) serveUDP(l *net.UDPConn) error {
|
||||||
// deadline is not used here
|
// deadline is not used here
|
||||||
for {
|
for {
|
||||||
m, s, err := reader.ReadUDP(l, rtimeout)
|
m, s, err := reader.ReadUDP(l, rtimeout)
|
||||||
srv.lock.RLock()
|
if !srv.isStarted() {
|
||||||
if !srv.started {
|
|
||||||
srv.lock.RUnlock()
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
srv.lock.RUnlock()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if netErr, ok := err.(net.Error); ok && netErr.Temporary() {
|
if netErr, ok := err.(net.Error); ok && netErr.Temporary() {
|
||||||
continue
|
continue
|
||||||
|
|
Loading…
Reference in New Issue