mirror of
https://github.com/caddyserver/caddy.git
synced 2024-12-27 22:23:48 +03:00
caddyhttp: Use sync.Pool to reduce lengthReader allocations (#5848)
* Use sync.Pool to reduce lengthReader allocations Signed-off-by: Harish Shan <140232061+perhapsmaple@users.noreply.github.com> * Add defer putLengthReader to prevent leak Signed-off-by: Harish Shan <140232061+perhapsmaple@users.noreply.github.com> * Cleanup in putLengthReader Co-authored-by: Francis Lavoie <lavofr@gmail.com> --------- Signed-off-by: Harish Shan <140232061+perhapsmaple@users.noreply.github.com> Co-authored-by: Francis Lavoie <lavofr@gmail.com>
This commit is contained in:
parent
24b0ecc310
commit
c8559c4485
1 changed files with 20 additions and 1 deletions
|
@ -318,7 +318,8 @@ func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
// so we can track the number of bytes read from it
|
// so we can track the number of bytes read from it
|
||||||
var bodyReader *lengthReader
|
var bodyReader *lengthReader
|
||||||
if r.Body != nil {
|
if r.Body != nil {
|
||||||
bodyReader = &lengthReader{Source: r.Body}
|
bodyReader = getLengthReader(r.Body)
|
||||||
|
defer putLengthReader(bodyReader)
|
||||||
r.Body = bodyReader
|
r.Body = bodyReader
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -902,6 +903,24 @@ type lengthReader struct {
|
||||||
Length int
|
Length int
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var lengthReaderPool = sync.Pool{
|
||||||
|
New: func() interface{} {
|
||||||
|
return &lengthReader{}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
func getLengthReader(source io.ReadCloser) *lengthReader {
|
||||||
|
reader := lengthReaderPool.Get().(*lengthReader)
|
||||||
|
reader.Source = source
|
||||||
|
return reader
|
||||||
|
}
|
||||||
|
|
||||||
|
func putLengthReader(reader *lengthReader) {
|
||||||
|
reader.Source = nil
|
||||||
|
reader.Length = 0
|
||||||
|
lengthReaderPool.Put(reader)
|
||||||
|
}
|
||||||
|
|
||||||
func (r *lengthReader) Read(b []byte) (int, error) {
|
func (r *lengthReader) Read(b []byte) (int, error) {
|
||||||
n, err := r.Source.Read(b)
|
n, err := r.Source.Read(b)
|
||||||
r.Length += n
|
r.Length += n
|
||||||
|
|
Loading…
Reference in a new issue