mirror of
https://github.com/XTLS/Xray-core.git
synced 2026-07-04 10:48:49 +00:00
Print trace if close take too long
This commit is contained in:
+22
-1
@@ -91,7 +91,28 @@ func executeRun(cmd *base.Command, args []string) {
|
|||||||
fmt.Println("Failed to start:", err)
|
fmt.Println("Failed to start:", err)
|
||||||
os.Exit(-1)
|
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.
|
// Explicitly triggering GC to remove garbage from config loading.
|
||||||
runtime.GC()
|
runtime.GC()
|
||||||
|
|||||||
Reference in New Issue
Block a user