WireGuard outbound: Fix a race condition (#6461)

Fixes https://github.com/XTLS/Xray-core/pull/6321#issuecomment-4881463309
This commit is contained in:
LjhAUMEM authored and GitHub committed 2026-07-09 20:40:02 +00:00
1 parent 5c62d50d43
commit 412898fed7
1 file changed
+4 -7
+4 -7
View File
@@ -139,15 +139,9 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer inte
ob.Name = "wireguard" ob.Name = "wireguard"
ob.CanSpliceCopy = 3 ob.CanSpliceCopy = 3
if h.dev == nil {
if err := h.init(ctx); err != nil { if err := h.init(ctx); err != nil {
return err return err
} }
}
if err := h.dev.Up(); err != nil {
return err
}
var addr netip.Addr var addr netip.Addr
if ob.Target.Address.Family().IsDomain() { if ob.Target.Address.Family().IsDomain() {
@@ -258,8 +252,11 @@ func (h *Handler) Close() (err error) {
func (h *Handler) init(ctx context.Context) error { func (h *Handler) init(ctx context.Context) error {
h.mu.Lock() h.mu.Lock()
defer h.mu.Unlock() defer h.mu.Unlock()
if h.tun == nil {
return errors.New("closed")
}
if h.dev != nil { if h.dev != nil {
return nil return h.dev.Up()
} }
resolveFunc := h.resolveLocal resolveFunc := h.resolveLocal
listenFunc := func() (net.PacketConn, error) { listenFunc := func() (net.PacketConn, error) {