Fix goroutine leaks

This commit is contained in:
Jeb.Wang 2025-01-15 19:02:46 +08:00
parent 93289aab03
commit 881f21431d

View File

@ -17,6 +17,7 @@ package proxy
import ( import (
"fmt" "fmt"
"reflect" "reflect"
"sync"
"github.com/fatedier/golib/errors" "github.com/fatedier/golib/errors"
@ -32,7 +33,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 {
@ -90,7 +92,9 @@ func (pxy *XTCPProxy) Run() (remoteAddr string, err error) {
func (pxy *XTCPProxy) Close() { func (pxy *XTCPProxy) Close() {
pxy.BaseProxy.Close() pxy.BaseProxy.Close()
pxy.rc.NatHoleController.CloseClient(pxy.GetName()) pxy.rc.NatHoleController.CloseClient(pxy.GetName())
_ = errors.PanicToError(func() { pxy.closeOnce.Do(func() {
close(pxy.closeCh) _ = errors.PanicToError(func() {
close(pxy.closeCh)
})
}) })
} }