This commit fixes several critical memory leaks in the gzip compression
middleware that could lead to significant memory accumulation under
specific usage patterns.
Changes:
1. Fixed WebSocket/Hijack resource leak (compress.go:213-219)
- Close gzip writer before hijacking connection
- Prevents ~32KB leak per WebSocket connection
- Critical for long-lived WebSocket connections
2. Fixed Flush() buffer accumulation (compress.go:200-204)
- Clear buffer after successful write during Flush()
- Prevents unbounded memory growth in SSE scenarios
- Important for Server-Sent Events and streaming responses
3. Improved pool management (compress.go:138-149)
- Check writer state before returning to pool
- Prevent corrupted writers from being reused
- Eliminates potential data corruption issues
Impact:
- WebSocket connections: no longer leak gzip writers (~32KB each)
- SSE/streaming: prevents linear buffer growth
- Pool safety: eliminates race conditions from reused writers
Fixes potential memory leaks affecting:
- WebSocket applications using compression middleware
- Server-Sent Events endpoints
- Long-lived streaming connections
- High-concurrency scenarios
This commit fixes several critical memory leaks in the gzip compression middleware that could lead to significant memory accumulation under specific usage patterns.
Changes:
Fixed WebSocket/Hijack resource leak (compress.go:213-219)
Fixed Flush() buffer accumulation (compress.go:200-204)
Improved pool management (compress.go:138-149)
Impact:
Fixes potential memory leaks affecting: