From 67c19f7054e987e876c7cd46d8190d101a547b29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=8B=E3=81=AE=E3=81=8B=E3=81=88=E3=81=A7?= Date: Wed, 21 Dec 2022 17:44:04 +0800 Subject: [PATCH] feat: refine PacketConnectionReader --- proxy/trojan/client.go | 8 ++------ proxy/trojan/protocol.go | 9 ++------- 2 files changed, 4 insertions(+), 13 deletions(-) diff --git a/proxy/trojan/client.go b/proxy/trojan/client.go index b4b3bf6df16..4b5d788d898 100644 --- a/proxy/trojan/client.go +++ b/proxy/trojan/client.go @@ -2,7 +2,6 @@ package trojan import ( "context" - "sync" core "github.com/v2fly/v2ray-core/v5" "github.com/v2fly/v2ray-core/v5/common" @@ -120,12 +119,9 @@ func (c *Client) Process(ctx context.Context, link *transport.Link, dialer inter defer timer.SetTimeout(sessionPolicy.Timeouts.UplinkOnly) packetReader := &PacketReader{Reader: conn} - splitReader := &PacketConnectionReader{ - readerAccess: &sync.Mutex{}, - reader: packetReader, - } + packetConnectionReader := &PacketConnectionReader{reader: packetReader} - return udp.CopyPacketConn(packetConn, splitReader, udp.UpdateActivity(timer)) + return udp.CopyPacketConn(packetConn, packetConnectionReader, udp.UpdateActivity(timer)) } responseDoneAndCloseWriter := task.OnSuccess(getResponse, task.Close(link.Writer)) diff --git a/proxy/trojan/protocol.go b/proxy/trojan/protocol.go index 9d4b74d924e..21e6a5a84cd 100644 --- a/proxy/trojan/protocol.go +++ b/proxy/trojan/protocol.go @@ -4,7 +4,6 @@ import ( "encoding/binary" "io" gonet "net" - "sync" "github.com/v2fly/v2ray-core/v5/common/buf" "github.com/v2fly/v2ray-core/v5/common/net" @@ -289,15 +288,11 @@ func (r *PacketReader) ReadMultiBufferWithMetadata() (*PacketPayload, error) { } type PacketConnectionReader struct { - readerAccess *sync.Mutex - reader *PacketReader - payload *PacketPayload + reader *PacketReader + payload *PacketPayload } func (r *PacketConnectionReader) ReadFrom(p []byte) (n int, addr gonet.Addr, err error) { - r.readerAccess.Lock() - defer r.readerAccess.Unlock() - if r.payload == nil || r.payload.Buffer.IsEmpty() { r.payload, err = r.reader.ReadMultiBufferWithMetadata() if err != nil {