Commit graph

8 commits

Author SHA1 Message Date
wjqserver
9dcab4b1ae fix: orDone 使用 sync.Once 修复 close(done) 竞态条件
修复 Gemini 审查意见:多 goroutine 同时 close(done) 可能导致 panic。
恢复 sync.Once 保证 channel 只被关闭一次。

Alina Agent生成
2026-04-22 09:37:19 +08:00
wjqserver
2d693e3b13 refactor: mergectx 简化结构,修复 Gemini 审查意见
- deadlineCtx 改为 cancelCtx 的子 context,建立父子层级关系
- 嵌入 cancelCtx/context.Context 直接提供 Done()/Err()/Deadline(),移除冗余方法
- orDone 中加入 cancelCtx,防止手动 cancel() 时 goroutine 泄漏
- 移除 cancelCtx/deadlineCtx/done/doneOnce 字段,struct 简化为 Context + parents
- 移除冗余 Cause() 方法(context.Cause 用 Value(&cancelCtxKey) 机制)
- 移除 Done()/Err() 显式实现,由嵌入 context 自动提供

Alina Agent生成
2026-04-22 09:27:53 +08:00
wjqserver
6006267d25 fix: Done() 使用 sync.Once 缓存 channel,避免重复创建 orDone goroutine
修复 Gemini 审查意见:多次调用 Done() 时不再重复创建 goroutine,
每个 mergedContext 最多产生 2 个 orDone goroutine。

Alina Agent生成
2026-04-22 09:00:01 +08:00
wjqserver
7487369125 improve: MergeCtx 支持 cause 传播, 使用 WithCancelCause/WithDeadlineCause
- 内部改用 context.WithCancelCause 和 WithDeadlineCause, 父 context 取消原因自动传播
- Value() 先检查嵌入 context 再查 parents, 确保 context.Cause() 正确工作
- Done()/Err() 同时监听 cancelCtx 和 deadlineCtx, 支持 deadline 到期 cause
- 新增 Cause() 便捷方法
- 单 parent 短路径改用 WithCancelCause 保留 cause
- 新增 mergectx_test.go, 覆盖 cause 传播、deadline、Value 查找等场景
- API 兼容: 返回类型保持 CancelFunc 不变

Alina Agent生成
2026-04-22 08:43:36 +08:00
wjqserver
d90d043811 fix: mergedContext.Value 遍历父 contexts 查找值 2026-03-30 02:21:11 +08:00
google-labs-jules[bot]
504089b748 feat: add MPL 2.0 license headers to all go files 2025-07-24 08:07:38 +00:00
wjqserver
49508b49c1 fix limitMaxSizeReader non use body close & fix mergeCtx Value 2025-07-09 00:17:52 +08:00
wjqserver
cb86cb935a add maxBytesReader & ctxMerge 2025-07-08 13:26:18 +08:00