From 2d23a46d337dda0dd70abb062539bb9539eced42 Mon Sep 17 00:00:00 2001 From: naison <895703375@qq.com> Date: Thu, 28 Aug 2025 20:25:26 +0800 Subject: [PATCH] hotfix: fix use too much memory (#710) --- pkg/core/gvisorlocaltcphandler.go | 1 + pkg/core/tunhandlerclient.go | 9 ++++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/pkg/core/gvisorlocaltcphandler.go b/pkg/core/gvisorlocaltcphandler.go index a35399ce..ce8670d2 100644 --- a/pkg/core/gvisorlocaltcphandler.go +++ b/pkg/core/gvisorlocaltcphandler.go @@ -36,6 +36,7 @@ func (h *gvisorLocalHandler) Run(ctx context.Context) { // for support ipv6 skip checksum // vendor/gvisor.dev/gvisor/pkg/tcpip/stack/nic.go:763 endpoint.LinkEPCapabilities = stack.CapabilityRXChecksumOffload + defer endpoint.Close() go func() { defer util.HandleCrash() readFromGvisorInboundWriteToEndpoint(ctx, h.gvisorInbound, endpoint) diff --git a/pkg/core/tunhandlerclient.go b/pkg/core/tunhandlerclient.go index a5efb598..1b221345 100644 --- a/pkg/core/tunhandlerclient.go +++ b/pkg/core/tunhandlerclient.go @@ -43,8 +43,11 @@ type ClientDevice struct { func (d *ClientDevice) handlePacket(ctx context.Context, forward *Forwarder) { for ctx.Err() == nil { func() { + subCtx, cancelFunc := context.WithCancel(ctx) + defer cancelFunc() + defer time.Sleep(time.Second * 2) - conn, err := forwardConn(ctx, forward) + conn, err := forwardConn(subCtx, forward) if err != nil { plog.G(ctx).Errorf("Failed to get remote conn from %s -> %s: %s", d.tun.LocalAddr(), forward.node.Remote, err) return @@ -52,8 +55,8 @@ func (d *ClientDevice) handlePacket(ctx context.Context, forward *Forwarder) { defer conn.Close() errChan := make(chan error, 2) - go readFromConn(ctx, conn, d.tunInbound, d.tunOutbound, errChan) - go writeToConn(ctx, conn, d.tunInbound, errChan) + go readFromConn(subCtx, conn, d.tunInbound, d.tunOutbound, errChan) + go writeToConn(subCtx, conn, d.tunInbound, errChan) select { case err = <-errChan: