소스 검색

frps: fix sometimes no response when frpc login to frps, see #142

fatedier 8 년 전
부모
커밋
37470c26f0
4개의 변경된 파일13개의 추가작업 그리고 5개의 파일을 삭제
  1. 0 0
      src/assets/statik/statik.go
  2. 1 0
      src/cmd/frps/control.go
  3. 1 1
      src/models/server/config.go
  4. 11 4
      src/models/server/server.go

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
src/assets/statik/statik.go


+ 1 - 0
src/cmd/frps/control.go

@@ -340,6 +340,7 @@ func doLogin(req *msg.ControlReq, c *conn.Conn) (ret int64, info string) {
 		if err != nil {
 			info = fmt.Sprintf("ProxyName [%s], start proxy error: %v", req.ProxyName, err)
 			log.Warn(info)
+			s.Close()
 			return
 		}
 		log.Info("ProxyName [%s], start proxy success", req.ProxyName)

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

@@ -395,7 +395,7 @@ func CreateProxy(s *ProxyServer) error {
 		if oldServer.Status == consts.Working {
 			return fmt.Errorf("this proxy is already working now")
 		}
-		oldServer.Close()
+		oldServer.Release()
 		if oldServer.PrivilegeMode {
 			delete(ProxyServers, s.Name)
 		}

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

@@ -270,6 +270,17 @@ func (p *ProxyServer) Start(c *conn.Conn) (err error) {
 }
 
 func (p *ProxyServer) Close() {
+	p.Release()
+
+	// if the proxy created by PrivilegeMode, delete it when closed
+	if p.PrivilegeMode {
+		// NOTE: this will take the global ProxyServerMap's lock
+		// if we only want to release resources, use Release() instead
+		DeleteProxy(p.Name)
+	}
+}
+
+func (p *ProxyServer) Release() {
 	p.Lock()
 	defer p.Unlock()
 
@@ -296,10 +307,6 @@ func (p *ProxyServer) Close() {
 		}
 	}
 	metric.SetStatus(p.Name, p.Status)
-	// if the proxy created by PrivilegeMode, delete it when closed
-	if p.PrivilegeMode {
-		DeleteProxy(p.Name)
-	}
 }
 
 func (p *ProxyServer) WaitUserConn() (closeFlag bool) {

이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.