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

View File

@@ -396,7 +396,9 @@ func (s *Instance) Start() error {
for _, f := range s.features {
if err := f.Start(); err != nil {
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
}
}

View File

@@ -14,6 +14,7 @@ import (
"github.com/gorilla/websocket"
"github.com/xtls/xray-core/common/errors"
"github.com/xtls/xray-core/common/platform"
"github.com/xtls/xray-core/common/serial"
"github.com/xtls/xray-core/common/uuid"
)
@@ -124,17 +125,20 @@ func StartCollectedDialerProxyURLs() error {
}
func StopCollectedDialerProxyURLs() error {
var stopErr error
var stopErrs []string
for listenAddr, server := range serversByListenAddr {
if err := server.stop(); err != nil && stopErr == nil {
stopErr = errors.New("failed to stop browser dialer listener on ", listenAddr).Base(err)
if err := server.stop(); err != nil {
stopErrs = append(stopErrs, serial.Concat("failed to stop browser dialer listener on ", listenAddr, ": ", err))
}
}
dialersByAddress = map[string]*dialerInstance{}
serversByListenAddr = map[string]*dialerServer{}
pendingURLs = nil
initialized = false
return stopErr
if len(stopErrs) > 0 {
return errors.New(strings.Join(stopErrs, "; "))
}
return nil
}
type dialerInstance struct {