Handle browser dialer cleanup errors on instance lifecycle

Agent-Logs-Url: https://github.com/XTLS/Xray-core/sessions/b8c640ab-f93c-4609-8e34-a8e14e2be9e7

Co-authored-by: RPRX <63339210+RPRX@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2026-04-27 13:36:11 +00:00
committed by GitHub
parent 8043924af5
commit 41bc47b1ec
2 changed files with 11 additions and 5 deletions
+3 -1
View File
@@ -396,7 +396,9 @@ func (s *Instance) Start() error {
for _, f := range s.features { for _, f := range s.features {
if err := f.Start(); err != nil { if err := f.Start(); err != nil {
s.running = false s.running = false
_ = browser_dialer.StopCollectedDialerProxyURLs() if stopErr := browser_dialer.StopCollectedDialerProxyURLs(); stopErr != nil {
return errors.New("failed to clean up browser dialer after startup failure").Base(errors.New(serial.Concat(err, "; ", stopErr)))
}
return err return err
} }
} }
+8 -4
View File
@@ -14,6 +14,7 @@ import (
"github.com/gorilla/websocket" "github.com/gorilla/websocket"
"github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/errors"
"github.com/xtls/xray-core/common/platform" "github.com/xtls/xray-core/common/platform"
"github.com/xtls/xray-core/common/serial"
"github.com/xtls/xray-core/common/uuid" "github.com/xtls/xray-core/common/uuid"
) )
@@ -124,17 +125,20 @@ func StartCollectedDialerProxyURLs() error {
} }
func StopCollectedDialerProxyURLs() error { func StopCollectedDialerProxyURLs() error {
var stopErr error var stopErrs []string
for listenAddr, server := range serversByListenAddr { for listenAddr, server := range serversByListenAddr {
if err := server.stop(); err != nil && stopErr == nil { if err := server.stop(); err != nil {
stopErr = errors.New("failed to stop browser dialer listener on ", listenAddr).Base(err) stopErrs = append(stopErrs, serial.Concat("failed to stop browser dialer listener on ", listenAddr, ": ", err))
} }
} }
dialersByAddress = map[string]*dialerInstance{} dialersByAddress = map[string]*dialerInstance{}
serversByListenAddr = map[string]*dialerServer{} serversByListenAddr = map[string]*dialerServer{}
pendingURLs = nil pendingURLs = nil
initialized = false initialized = false
return stopErr if len(stopErrs) > 0 {
return errors.New(strings.Join(stopErrs, "; "))
}
return nil
} }
type dialerInstance struct { type dialerInstance struct {