fix bug for WaitAll
This commit is contained in:
parent
e8219eb1ec
commit
7bae8c77a2
41
gojs.go
41
gojs.go
@ -192,26 +192,24 @@ func WaitAll() {
|
|||||||
sigCh := make(chan os.Signal, 1)
|
sigCh := make(chan os.Signal, 1)
|
||||||
signal.Notify(sigCh, os.Interrupt, syscall.SIGTERM, syscall.SIGINT, syscall.SIGHUP)
|
signal.Notify(sigCh, os.Interrupt, syscall.SIGTERM, syscall.SIGINT, syscall.SIGHUP)
|
||||||
go func() {
|
go func() {
|
||||||
for {
|
for sig := range sigCh {
|
||||||
select {
|
if stopped {
|
||||||
case sig := <-sigCh:
|
break
|
||||||
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 onKills {
|
||||||
for _, fn := range onSignals {
|
fn()
|
||||||
fn(sig)
|
|
||||||
}
|
|
||||||
// kill
|
|
||||||
if sig == syscall.SIGINT || sig == syscall.SIGTERM {
|
|
||||||
if wr != nil {
|
|
||||||
wr.Stop()
|
|
||||||
}
|
|
||||||
for _, fn := range onKills {
|
|
||||||
fn()
|
|
||||||
}
|
|
||||||
break
|
|
||||||
}
|
}
|
||||||
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
@ -231,8 +229,11 @@ func WaitAll() {
|
|||||||
}(fn)
|
}(fn)
|
||||||
}
|
}
|
||||||
<-waitChan
|
<-waitChan
|
||||||
stopped = true
|
if !stopped {
|
||||||
sigCh <- syscall.SIGTERM
|
// 优雅的关闭信号等待线程
|
||||||
|
stopped = true
|
||||||
|
sigCh <- syscall.SIGTERM
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user