Skip to content

fix(handler): opsCaptureWriter 释放后 nil pointer panic#3994

Merged
Wei-Shaw merged 2 commits into
Wei-Shaw:mainfrom
fengshao1227:fix/compact-keepalive-nil-pointer
Jul 10, 2026
Merged

fix(handler): opsCaptureWriter 释放后 nil pointer panic#3994
Wei-Shaw merged 2 commits into
Wei-Shaw:mainfrom
fengshao1227:fix/compact-keepalive-nil-pointer

Conversation

@fengshao1227

Copy link
Copy Markdown
Contributor

背景

Fixes #3993,关联 #3961

v0.1.150 compact 请求失败时 logger middleware 访问已释放的 opsCaptureWriter 导致 panic。多人复现,gpt-5.6/5.5 都中。

根因

releaseOpsCaptureWriter 把 w.ResponseWriter 设成 nil 放回 sync.Pool,但 openAICompactKeepaliveWriter 还持有对它的引用。logger middleware 在 handler 之后执行 c.Writer.Status(),调用链穿透到 nil 接口就 panic 了。

修改

给 opsCaptureWriter 加了 Status()、Size()、Written() 三个 nil 守卫方法,Write/WriteString 也加了守卫。释放后再调用这些方法返回零值而不是 panic。

测试

go test ./internal/handler/ -run TestOpsCaptureWriter_NilInnerWriter -v  # 通过

5 个断言覆盖了所有 5 个可能 panic 的方法。

@Wei-Shaw Wei-Shaw merged commit 151b926 into Wei-Shaw:main Jul 10, 2026
7 checks passed
@github-actions github-actions Bot locked and limited conversation to collaborators Jul 10, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

compact 失败后 opsCaptureWriter nil panic(v0.1.150)

2 participants