fix bug for WaitAll

This commit is contained in:
Star 2025-07-18 22:40:17 +08:00
parent e8219eb1ec
commit 7bae8c77a2

41
gojs.go
View File

@ -192,26 +192,24 @@ func WaitAll() {
sigCh := make(chan os.Signal, 1)
signal.Notify(sigCh, os.Interrupt, syscall.SIGTERM, syscall.SIGINT, syscall.SIGHUP)
go func() {
for {
select {
case sig := <-sigCh:
if stopped {
break
for sig := range sigCh {
if stopped {
break
}
stopped = true
// send signal
for _, fn := range onSignals {
fn(sig)
}
// kill
if sig == syscall.SIGINT || sig == syscall.SIGTERM {
if wr != nil {
wr.Stop()
}
// send signal
for _, fn := range onSignals {
fn(sig)
}
// kill
if sig == syscall.SIGINT || sig == syscall.SIGTERM {
if wr != nil {
wr.Stop()
}
for _, fn := range onKills {
fn()
}
break
for _, fn := range onKills {
fn()
}
break
}
}
}()
@ -231,8 +229,11 @@ func WaitAll() {
}(fn)
}
<-waitChan
stopped = true
sigCh <- syscall.SIGTERM
if !stopped {
// 优雅的关闭信号等待线程
stopped = true
sigCh <- syscall.SIGTERM
}
}
}