yangjianbo
823497a2af
fix(并发): 修复 wrapReleaseOnDone goroutine 泄露问题
问题描述:
- wrapReleaseOnDone 函数创建的 goroutine 会持续等待 ctx.Done()
- 即使 release() 已被调用,goroutine 仍不会退出
- 高并发场景下(1000 req/s)会产生 3000+ 个泄露 goroutine
修复方案:
- 添加 quit channel 作为退出信号
- 正常释放时 close(quit) 通知 goroutine 立即退出
- 使用 select 监听 ctx.Done() 和 quit 两个信号
- 确保 goroutine 在正常流程中及时退出
测试覆盖:
- 新增 5 个单元测试验证修复效果
- 验证 goroutine 不泄露
- 验证并发安全性和多次调用保护
- 性能影响:471.9 ns/op, 208 B/op
影响范围:
- gateway_handler.go: 每请求调用 2-4 次
- openai_gateway_handler.go: 每请求调用 2-3 次
- 修复后 goroutine 泄露数量从 3/req 降至 0
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-06 20:31:40 +08:00
..
2026-01-06 11:29:35 +08:00
2026-01-06 10:49:26 +08:00
2026-01-04 19:28:20 +08:00
2025-12-29 03:24:15 +08:00
2026-01-04 22:10:32 +08:00
2026-01-06 20:31:40 +08:00
2026-01-06 20:31:40 +08:00
2025-12-28 17:48:52 +08:00
2026-01-05 13:54:43 +08:00
2026-01-03 06:37:08 -08:00
2026-01-04 21:06:12 +08:00
2025-12-26 16:45:40 +08:00
2025-12-31 08:50:12 +08:00
2025-12-31 08:50:12 +08:00
2026-01-04 17:02:38 +08:00
2025-12-26 16:45:40 +08:00
2026-01-05 20:43:03 -06:00
2026-01-01 18:59:38 +08:00
2026-01-03 06:37:08 -08:00