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

This commit is contained in:
fatedier 2016-12-27 01:19:19 +08:00
parent 04a4591caa
commit 37470c26f0
4 changed files with 14 additions and 6 deletions

File diff suppressed because one or more lines are too long

View File

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

View File

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

View File

@ -270,6 +270,17 @@ func (p *ProxyServer) Start(c *conn.Conn) (err error) {
} }
func (p *ProxyServer) Close() { 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() p.Lock()
defer p.Unlock() defer p.Unlock()
@ -296,10 +307,6 @@ func (p *ProxyServer) Close() {
} }
} }
metric.SetStatus(p.Name, p.Status) 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) { func (p *ProxyServer) WaitUserConn() (closeFlag bool) {