Pārlūkot izejas kodu

frps: fix panic caused by frps closing the nil channel, fix #205

fatedier 8 gadi atpakaļ
vecāks
revīzija
299bd7b5cb

+ 0 - 1
src/models/server/config.go

@@ -405,7 +405,6 @@ func CreateProxy(s *ProxyServer) error {
 	ProxyServers[s.Name] = s
 	metric.SetProxyInfo(s.Name, s.Type, s.BindAddr, s.UseEncryption, s.UseGzip,
 		s.PrivilegeMode, s.CustomDomains, s.Locations, s.ListenPort)
-	s.Init()
 	return nil
 }
 

+ 18 - 4
src/models/server/server.go

@@ -83,6 +83,8 @@ func NewProxyServerFromCtlMsg(req *msg.ControlReq) (p *ProxyServer) {
 	p.HostHeaderRewrite = req.HostHeaderRewrite
 	p.HttpUserName = req.HttpUserName
 	p.HttpPassWord = req.HttpPassWord
+
+	p.Init()
 	return
 }
 
@@ -298,10 +300,22 @@ func (p *ProxyServer) Release() {
 				l.Close()
 			}
 		}
-		close(p.ctlMsgChan)
-		close(p.workConnChan)
-		close(p.udpSenderChan)
-		close(p.closeChan)
+		if p.ctlMsgChan != nil {
+			close(p.ctlMsgChan)
+			p.ctlMsgChan = nil
+		}
+		if p.workConnChan != nil {
+			close(p.workConnChan)
+			p.workConnChan = nil
+		}
+		if p.udpSenderChan != nil {
+			close(p.udpSenderChan)
+			p.udpSenderChan = nil
+		}
+		if p.closeChan != nil {
+			close(p.closeChan)
+			p.closeChan = nil
+		}
 		if p.CtlConn != nil {
 			p.CtlConn.Close()
 		}

+ 1 - 1
src/utils/version/version.go

@@ -19,7 +19,7 @@ import (
 	"strings"
 )
 
-var version string = "0.9.1"
+var version string = "0.9.2"
 
 func Full() string {
 	return version