fix: 使用 context 替代 closeChan 修复 processLoop 中 send on closed channel …#34
fix: 使用 context 替代 closeChan 修复 processLoop 中 send on closed channel …#34caiwc wants to merge 3 commits into
Conversation
…panic 子 goroutine(读消息、ping 超时)在 processLoop 退出后仍可能向已关闭的 closeChan 发送数据,导致 panic: send on closed channel。 使用 context.WithCancel 替代 closeChan 作为关闭信号机制,所有子 goroutine 通过 cancelLoop() 通知退出,主循环监听 loopCtx.Done(),彻底消除竞态。 Fixes: open-dingtalk#27, open-dingtalk#28, open-dingtalk#32 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
求合并,同遇到这个问题 |
|
AI review出来的小问题,需要麻烦看卡 @caiwc 仍存在的小瑕疵(建议作者顺手修) |
@wqyenjoy 已处理,删掉了 |
|
please give me your test case ,thanks for your pr @caiwc |
测试用例已经补上了,这次主要覆盖了 新增的几个 case 是: 分别对应:
这几个用例对应的是这次 PR 修的几个关闭路径问题。提交在 920212d。 |
|
我提的都被关闭了,有朋友说官方不在意,只能自己做一个分支自己修复了,哎 |
…panic
子 goroutine(读消息、ping 超时)在 processLoop 退出后仍可能向已关闭的
closeChan 发送数据,导致 panic: send on closed channel。
使用 context.WithCancel 替代 closeChan 作为关闭信号机制,所有子 goroutine 通过 cancelLoop() 通知退出,主循环监听 loopCtx.Done(),彻底消除竞态。
Fixes: #27, #28, #32