fix: capture client IP before stream writer to prevent race condition with fiber context
This commit is contained in:
@@ -299,6 +299,9 @@ func handleStreaming(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Stream the SSE response
|
// Stream the SSE response
|
||||||
|
// Capture values before SetBodyStreamWriter — the callback runs in a
|
||||||
|
// separate goroutine where fiber.Ctx is no longer valid.
|
||||||
|
clientIP := c.IP()
|
||||||
transformer := transform.NewStreamTransformer("", "")
|
transformer := transform.NewStreamTransformer("", "")
|
||||||
c.Set("Content-Type", "text/event-stream")
|
c.Set("Content-Type", "text/event-stream")
|
||||||
c.Set("Cache-Control", "no-cache")
|
c.Set("Cache-Control", "no-cache")
|
||||||
@@ -320,17 +323,17 @@ func handleStreaming(
|
|||||||
event := transformer.TransformChunk(chunk)
|
event := transformer.TransformChunk(chunk)
|
||||||
if event != "" {
|
if event != "" {
|
||||||
if _, err := w.WriteString(event); err != nil {
|
if _, err := w.WriteString(event); err != nil {
|
||||||
logger.Warn("[ANTHROPIC] Stream write error [IP: %s]: %v", c.IP(), err)
|
logger.Warn("[ANTHROPIC] Stream write error [IP: %s]: %v", clientIP, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if err := w.Flush(); err != nil {
|
if err := w.Flush(); err != nil {
|
||||||
logger.Warn("[ANTHROPIC] Stream flush error [IP: %s]: %v", c.IP(), err)
|
logger.Warn("[ANTHROPIC] Stream flush error [IP: %s]: %v", clientIP, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if err := scanner.Err(); err != nil {
|
if err := scanner.Err(); err != nil {
|
||||||
logger.Warn("[ANTHROPIC] Stream scan error [IP: %s]: %v", c.IP(), err)
|
logger.Warn("[ANTHROPIC] Stream scan error [IP: %s]: %v", clientIP, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
// Ensure final events are sent
|
// Ensure final events are sent
|
||||||
|
|||||||
Reference in New Issue
Block a user