Compare commits

..
1 Commits
Author SHA1 Message Date
Fangliding 6d3ebc4239 Print trace if close take too long 2026-05-19 22:18:26 +08:00
2 changed files with 23 additions and 2 deletions
+22 -1
View File
@@ -91,7 +91,28 @@ func executeRun(cmd *base.Command, args []string) {
fmt.Println("Failed to start:", err)
os.Exit(-1)
}
defer server.Close()
defer func() {
closeErrCh := make(chan error, 1)
go func() {
closeErrCh <- server.Close()
}()
select {
case err := <-closeErrCh:
if err != nil {
fmt.Println("Failed to close server:", err)
}
case <-time.After(10 * time.Second):
fmt.Println("Timeout when closing, printing traces:")
buf := make([]byte, 1<<20)
n := runtime.Stack(buf, true)
blocks := strings.Split(string(buf[:n]), "\n\n")
for _, block := range blocks {
if strings.Contains(block, "github.com/xtls/xray-core/core.(*Instance).Close") {
fmt.Println(block)
}
}
}
}()
// Explicitly triggering GC to remove garbage from config loading.
runtime.GC()
+1 -1
View File
@@ -309,7 +309,7 @@ func Listen(ctx context.Context, address net.Address, port net.Port, streamSetti
tr := &quic.Transport{Conn: pktConn}
listener, err := tr.Listen(tlsConfig.GetTLSConfig(tls.WithNextProto("h3")), quicConfig)
listener, err := tr.Listen(tlsConfig.GetTLSConfig(), quicConfig)
if err != nil {
_ = tr.Close()
_ = pktConn.Close()