Browse Source

udp proxy: fix #652

fatedier 7 years ago
parent
commit
e9241aeb94
2 changed files with 5 additions and 2 deletions
  1. 1 0
      models/proto/udp/udp.go
  2. 4 2
      server/control.go

+ 1 - 0
models/proto/udp/udp.go

@@ -82,6 +82,7 @@ func Forwarder(dstAddr *net.UDPAddr, readCh <-chan *msg.UdpPacket, sendCh chan<-
 			mu.Lock()
 			delete(udpConnMap, addr)
 			mu.Unlock()
+			udpConn.Close()
 		}()
 
 		buf := pool.GetBuf(1500)

+ 4 - 2
server/control.go

@@ -265,13 +265,14 @@ func (ctl *Control) stoper() {
 	ctl.conn.Close()
 	ctl.readerShutdown.WaitDone()
 
+	ctl.mu.Lock()
+	defer ctl.mu.Unlock()
+
 	close(ctl.workConnCh)
 	for workConn := range ctl.workConnCh {
 		workConn.Close()
 	}
 
-	ctl.mu.Lock()
-	defer ctl.mu.Unlock()
 	for _, pxy := range ctl.proxies {
 		pxy.Close()
 		ctl.svr.DelProxy(pxy.GetName())
@@ -303,6 +304,7 @@ func (ctl *Control) manager() {
 			if time.Since(ctl.lastPing) > time.Duration(config.ServerCommonCfg.HeartBeatTimeout)*time.Second {
 				ctl.conn.Warn("heartbeat timeout")
 				ctl.allShutdown.Start()
+				return
 			}
 		case rawMsg, ok := <-ctl.readCh:
 			if !ok {