fix: 修复 onStop 无法等待逻辑执行完成的问题

This commit is contained in:
kercylan98 2023-07-19 17:25:12 +08:00
parent 013436ab03
commit 037c9b7bbd
3 changed files with 15 additions and 6 deletions

View File

@ -45,11 +45,9 @@ func (slf *event) RegStopEvent(handle StopEventHandle) {
} }
func (slf *event) OnStopEvent() { func (slf *event) OnStopEvent() {
PushSystemMessage(slf.Server, func() {
for _, handle := range slf.stopEventHandles { for _, handle := range slf.stopEventHandles {
handle(slf.Server) handle(slf.Server)
} }
})
} }
// RegConsoleCommandEvent 控制台收到指令时将立即执行被注册的事件处理函数 // RegConsoleCommandEvent 控制台收到指令时将立即执行被注册的事件处理函数

View File

@ -72,6 +72,9 @@ func (slf *MultipleServer) Run() {
signal.Notify(systemSignal, syscall.SIGHUP, syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGINT) signal.Notify(systemSignal, syscall.SIGHUP, syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGINT)
select { select {
case err := <-exceptionChannel: case err := <-exceptionChannel:
for _, server := range slf.servers {
server.OnStopEvent()
}
for len(slf.servers) > 0 { for len(slf.servers) > 0 {
server := slf.servers[0] server := slf.servers[0]
server.shutdown(err) server.shutdown(err)
@ -79,6 +82,9 @@ func (slf *MultipleServer) Run() {
} }
break break
case <-runtimeExceptionChannel: case <-runtimeExceptionChannel:
for _, server := range slf.servers {
server.OnStopEvent()
}
for len(slf.servers) > 0 { for len(slf.servers) > 0 {
server := slf.servers[0] server := slf.servers[0]
server.multipleRuntimeErrorChan = nil server.multipleRuntimeErrorChan = nil
@ -87,6 +93,9 @@ func (slf *MultipleServer) Run() {
} }
break break
case <-systemSignal: case <-systemSignal:
for _, server := range slf.servers {
server.OnStopEvent()
}
for len(slf.servers) > 0 { for len(slf.servers) > 0 {
server := slf.servers[0] server := slf.servers[0]
server.multipleRuntimeErrorChan = nil server.multipleRuntimeErrorChan = nil

View File

@ -392,7 +392,9 @@ func (slf *Server) Shutdown() {
// shutdown 停止运行服务器 // shutdown 停止运行服务器
func (slf *Server) shutdown(err error) { func (slf *Server) shutdown(err error) {
if slf.multiple == nil {
slf.OnStopEvent() slf.OnStopEvent()
}
defer func() { defer func() {
if slf.multipleRuntimeErrorChan != nil { if slf.multipleRuntimeErrorChan != nil {
slf.multipleRuntimeErrorChan <- err slf.multipleRuntimeErrorChan <- err