runtime: support Goexit

This commit is contained in:
visualfc
2025-02-16 08:21:58 +08:00
parent e74d2b45c0
commit 6d7e984238
3 changed files with 31 additions and 3 deletions

View File

@@ -78,17 +78,31 @@ func Rethrow(link *Defer) {
}
var (
excepKey pthread.Key
excepKey pthread.Key
mainThread pthread.Thread
goexit struct{}
)
func Goexit() {
panic(goexit)
}
func init() {
excepKey.Create(nil)
mainThread = pthread.Self()
}
// -----------------------------------------------------------------------------
// TracePanic prints panic message.
func TracePanic(v any) {
if v == goexit {
if pthread.Equal(mainThread, pthread.Self()) != 0 {
fatal("no goroutines (main called runtime.Goexit) - deadlock!")
c.Exit(2)
}
pthread.Exit(nil)
}
print("panic: ")
printany(v)
println("\n")