From 568357315c9e2185b062cfb43f6887b464f8a09e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=96=E7=95=8C?= Date: Mon, 1 Jun 2026 17:40:22 +0800 Subject: [PATCH] ping: Fix unprivileged conn --- ping/socket_linux_unprivileged.go | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/ping/socket_linux_unprivileged.go b/ping/socket_linux_unprivileged.go index c0026ad..599eab9 100644 --- a/ping/socket_linux_unprivileged.go +++ b/ping/socket_linux_unprivileged.go @@ -94,8 +94,9 @@ func (c *UnprivilegedConn) Write(b []byte) (n int, err error) { } c.mappingAccess.Lock() - if c.ctx.Err() != nil { - return 0, c.ctx.Err() + if err = c.ctx.Err(); err != nil { + c.mappingAccess.Unlock() + return 0, err } conn, loaded := c.mapping[identifier] if !loaded { @@ -159,9 +160,12 @@ func (c *UnprivilegedConn) fetchResponse(conn *net.UDPConn, identifier uint16) { func (c *UnprivilegedConn) removeConn(conn *net.UDPConn, identifier uint16) { c.mappingAccess.Lock() - defer c.mappingAccess.Unlock() + mappedConn, loaded := c.mapping[identifier] + if loaded && mappedConn == conn { + delete(c.mapping, identifier) + } + c.mappingAccess.Unlock() _ = conn.Close() - delete(c.mapping, identifier) } func (c *UnprivilegedConn) Close() error {