From 412898fed781e151a46dd25241c78fe014c8e35c Mon Sep 17 00:00:00 2001 From: LjhAUMEM Date: Fri, 10 Jul 2026 04:40:02 +0800 Subject: [PATCH] WireGuard outbound: Fix a race condition (#6461) Fixes https://github.com/XTLS/Xray-core/pull/6321#issuecomment-4881463309 --- proxy/wireguard/client.go | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/proxy/wireguard/client.go b/proxy/wireguard/client.go index 4491886ab..c50dd995f 100644 --- a/proxy/wireguard/client.go +++ b/proxy/wireguard/client.go @@ -139,13 +139,7 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer inte ob.Name = "wireguard" ob.CanSpliceCopy = 3 - if h.dev == nil { - if err := h.init(ctx); err != nil { - return err - } - } - - if err := h.dev.Up(); err != nil { + if err := h.init(ctx); err != nil { return err } @@ -258,8 +252,11 @@ func (h *Handler) Close() (err error) { func (h *Handler) init(ctx context.Context) error { h.mu.Lock() defer h.mu.Unlock() + if h.tun == nil { + return errors.New("closed") + } if h.dev != nil { - return nil + return h.dev.Up() } resolveFunc := h.resolveLocal listenFunc := func() (net.PacketConn, error) {