From 6ec0291d4e9a074cd39bf3b288d80de5f16e0662 Mon Sep 17 00:00:00 2001 From: RPRX <63339210+RPRX@users.noreply.github.com> Date: Fri, 5 Sep 2025 15:58:49 +0000 Subject: [PATCH] app/reverse/bridge.go: Fix DispatchLink() returns immediately Fixes https://github.com/XTLS/Xray-core/issues/5088 --- app/reverse/bridge.go | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/app/reverse/bridge.go b/app/reverse/bridge.go index 5cc60ad7..20719ef1 100644 --- a/app/reverse/bridge.go +++ b/app/reverse/bridge.go @@ -149,25 +149,23 @@ func (w *BridgeWorker) Connections() uint32 { } func (w *BridgeWorker) handleInternalConn(link *transport.Link) { - go func() { - reader := link.Reader - for { - mb, err := reader.ReadMultiBuffer() - if err != nil { + reader := link.Reader + for { + mb, err := reader.ReadMultiBuffer() + if err != nil { + break + } + for _, b := range mb { + var ctl Control + if err := proto.Unmarshal(b.Bytes(), &ctl); err != nil { + errors.LogInfoInner(context.Background(), err, "failed to parse proto message") break } - for _, b := range mb { - var ctl Control - if err := proto.Unmarshal(b.Bytes(), &ctl); err != nil { - errors.LogInfoInner(context.Background(), err, "failed to parse proto message") - break - } - if ctl.State != w.state { - w.state = ctl.State - } + if ctl.State != w.state { + w.state = ctl.State } } - }() + } } func (w *BridgeWorker) Dispatch(ctx context.Context, dest net.Destination) (*transport.Link, error) { @@ -182,7 +180,7 @@ func (w *BridgeWorker) Dispatch(ctx context.Context, dest net.Destination) (*tra uplinkReader, uplinkWriter := pipe.New(opt...) downlinkReader, downlinkWriter := pipe.New(opt...) - w.handleInternalConn(&transport.Link{ + go w.handleInternalConn(&transport.Link{ Reader: downlinkReader, Writer: uplinkWriter, })