Skip to content

fix: prevent exitChan blocking in websocket mode#399

Open
chenhang233 wants to merge 1 commit intoaceld:masterfrom
chenhang233:fix-exitchan-blocking
Open

fix: prevent exitChan blocking in websocket mode#399
chenhang233 wants to merge 1 commit intoaceld:masterfrom
chenhang233:fix-exitchan-blocking

Conversation

@chenhang233
Copy link
Copy Markdown

通过退出信号试图停止进程,发现一直阻塞到超时.
关闭的 channel 会立即让所有阻塞的 <-ch 操作返回零值. t.exitChan <- struct{}{} 是多余的.

如果只启动websocket模式:
没有 goroutine 在执行 <-s.exitChan
s.exitChan <- struct{}{} 永久阻塞

@aceld
Copy link
Copy Markdown
Owner

aceld commented Apr 28, 2026

@chenhang233 感谢提交PR,虽然这个改动不大,但是很关键,这个问题我没复现出来,请问你是否有复现的步骤,来确保你这边修复的正确性。

@chenhang233
Copy link
Copy Markdown
Author

`package main

import (
"fmt"
"github.com/aceld/zinx/zconf"
"github.com/aceld/zinx/ziface"
"github.com/aceld/zinx/znet"
"time"
)

func NewServer() ziface.IServer {
zconf.GlobalObject.Host = "0.0.0.0"
zconf.GlobalObject.Mode = "websocket"
zconf.GlobalObject.WsPort = 9100
zconf.GlobalObject.InitLogConfig()
return znet.NewServer()
}
func main() {
server := NewServer()
server.Start()
time.Sleep(1 * time.Second)
fmt.Println("before stop")
server.Stop()
fmt.Println("after stop")
}
`
这是最小化复现代码.goland 2025.1.7 正常应该执行完然后退出程序.但是会阻塞在 s.exitChan <- struct{}{}.
image

@chenhang233
Copy link
Copy Markdown
Author

chenhang233 commented Apr 28, 2026 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants