From 558e625a019fe9e5d208c3dfb1b3068d48ce46d5 Mon Sep 17 00:00:00 2001 From: "1808837298@qq.com" <1808837298@qq.com> Date: Wed, 5 Mar 2025 19:51:22 +0800 Subject: [PATCH] fix: Prevent resource leaks by adding body close in stream handlers --- relay/channel/claude/relay-claude.go | 2 +- relay/channel/gemini/relay-gemini.go | 2 +- relay/channel/openai/relay-openai.go | 2 +- relay/helper/stream_scanner.go | 5 ++++- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/relay/channel/claude/relay-claude.go b/relay/channel/claude/relay-claude.go index 5c47cbc4..09154bcb 100644 --- a/relay/channel/claude/relay-claude.go +++ b/relay/channel/claude/relay-claude.go @@ -506,7 +506,7 @@ func ClaudeStreamHandler(c *gin.Context, resp *http.Response, info *relaycommon. } } helper.Done(c) - resp.Body.Close() + //resp.Body.Close() return nil, usage } diff --git a/relay/channel/gemini/relay-gemini.go b/relay/channel/gemini/relay-gemini.go index f6e5df1e..c1ce8219 100644 --- a/relay/channel/gemini/relay-gemini.go +++ b/relay/channel/gemini/relay-gemini.go @@ -534,7 +534,7 @@ func GeminiChatStreamHandler(c *gin.Context, resp *http.Response, info *relaycom } } helper.Done(c) - resp.Body.Close() + //resp.Body.Close() return nil, usage } diff --git a/relay/channel/openai/relay-openai.go b/relay/channel/openai/relay-openai.go index fd5e3d74..0afe3f51 100644 --- a/relay/channel/openai/relay-openai.go +++ b/relay/channel/openai/relay-openai.go @@ -249,7 +249,7 @@ func OaiStreamHandler(c *gin.Context, resp *http.Response, info *relaycommon.Rel helper.Done(c) - resp.Body.Close() + //resp.Body.Close() return nil, usage } diff --git a/relay/helper/stream_scanner.go b/relay/helper/stream_scanner.go index 07462aa7..115e2de8 100644 --- a/relay/helper/stream_scanner.go +++ b/relay/helper/stream_scanner.go @@ -15,7 +15,10 @@ import ( ) func StreamScannerHandler(c *gin.Context, resp *http.Response, info *relaycommon.RelayInfo, dataHandler func(data string) bool) { - + if resp == nil { + return + } + defer resp.Body.Close() streamingTimeout := time.Duration(constant.StreamingTimeout) * time.Second if strings.HasPrefix(info.UpstreamModelName, "o1") || strings.HasPrefix(info.UpstreamModelName, "o3") { // twice timeout for thinking model