Browse Source

Fix goroutine leaks

* Fix goroutine leaks
Jeb.Wang 1 month ago
parent
commit
450b8393bc
1 changed files with 7 additions and 6 deletions
  1. 7 6
      server/proxy/xtcp.go

+ 7 - 6
server/proxy/xtcp.go

@@ -17,8 +17,7 @@ package proxy
 import (
 import (
 	"fmt"
 	"fmt"
 	"reflect"
 	"reflect"
-
-	"github.com/fatedier/golib/errors"
+	"sync"
 
 
 	v1 "github.com/fatedier/frp/pkg/config/v1"
 	v1 "github.com/fatedier/frp/pkg/config/v1"
 	"github.com/fatedier/frp/pkg/msg"
 	"github.com/fatedier/frp/pkg/msg"
@@ -32,7 +31,8 @@ type XTCPProxy struct {
 	*BaseProxy
 	*BaseProxy
 	cfg *v1.XTCPProxyConfig
 	cfg *v1.XTCPProxyConfig
 
 
-	closeCh chan struct{}
+	closeCh   chan struct{}
+	closeOnce sync.Once
 }
 }
 
 
 func NewXTCPProxy(baseProxy *BaseProxy) Proxy {
 func NewXTCPProxy(baseProxy *BaseProxy) Proxy {
@@ -43,6 +43,7 @@ func NewXTCPProxy(baseProxy *BaseProxy) Proxy {
 	return &XTCPProxy{
 	return &XTCPProxy{
 		BaseProxy: baseProxy,
 		BaseProxy: baseProxy,
 		cfg:       unwrapped,
 		cfg:       unwrapped,
+		closeCh:   make(chan struct{}),
 	}
 	}
 }
 }
 
 
@@ -87,9 +88,9 @@ func (pxy *XTCPProxy) Run() (remoteAddr string, err error) {
 }
 }
 
 
 func (pxy *XTCPProxy) Close() {
 func (pxy *XTCPProxy) Close() {
-	pxy.BaseProxy.Close()
-	pxy.rc.NatHoleController.CloseClient(pxy.GetName())
-	_ = errors.PanicToError(func() {
+	pxy.closeOnce.Do(func() {
+		pxy.BaseProxy.Close()
+		pxy.rc.NatHoleController.CloseClient(pxy.GetName())
 		close(pxy.closeCh)
 		close(pxy.closeCh)
 	})
 	})
 }
 }