From 8f633fe363ae20d244e23b77b8dc5260b3171e8f Mon Sep 17 00:00:00 2001 From: fatedier Date: Fri, 6 Mar 2026 15:55:22 +0800 Subject: [PATCH] fix: return buffers to pool on error paths to reduce GC pressure (#5203) - pkg/nathole/nathole.go: add pool.PutBuf(buf) on ReadFromUDP error and DecodeMessageInto error paths in waitDetectMessage - pkg/proto/udp/udp.go: add defer pool.PutBuf(buf) in writerFn to ensure buffer is returned when the goroutine exits --- pkg/nathole/nathole.go | 2 ++ pkg/proto/udp/udp.go | 1 + 2 files changed, 3 insertions(+) diff --git a/pkg/nathole/nathole.go b/pkg/nathole/nathole.go index 72522fac..7d6ebe89 100644 --- a/pkg/nathole/nathole.go +++ b/pkg/nathole/nathole.go @@ -298,11 +298,13 @@ func waitDetectMessage( n, raddr, err := conn.ReadFromUDP(buf) _ = conn.SetReadDeadline(time.Time{}) if err != nil { + pool.PutBuf(buf) return nil, err } xl.Debugf("get udp message local %s, from %s", conn.LocalAddr(), raddr) var m msg.NatHoleSid if err := DecodeMessageInto(buf[:n], key, &m); err != nil { + pool.PutBuf(buf) xl.Warnf("decode sid message error: %v", err) continue } diff --git a/pkg/proto/udp/udp.go b/pkg/proto/udp/udp.go index 4d3df5af..21c41680 100644 --- a/pkg/proto/udp/udp.go +++ b/pkg/proto/udp/udp.go @@ -85,6 +85,7 @@ func Forwarder(dstAddr *net.UDPAddr, readCh <-chan *msg.UDPPacket, sendCh chan<- }() buf := pool.GetBuf(bufSize) + defer pool.PutBuf(buf) for { _ = udpConn.SetReadDeadline(time.Now().Add(30 * time.Second)) n, _, err := udpConn.ReadFromUDP(buf)