diff options
author | Sergio VS <savsgio.engineer@gmail.com> | 2021-12-16 05:27:02 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-12-16 05:27:02 +0100 |
commit | 258a4c17b4f451f9a1f9bae3f34d3f5d6e9e0bfd (patch) | |
tree | a3f997786dd12d755c28d7771567b7fe4607be58 /server.go | |
parent | Use %w to wrap errors (#1175) (diff) | |
download | fasthttp-258a4c17b4f451f9a1f9bae3f34d3f5d6e9e0bfd.tar.gz fasthttp-258a4c17b4f451f9a1f9bae3f34d3f5d6e9e0bfd.tar.bz2 fasthttp-258a4c17b4f451f9a1f9bae3f34d3f5d6e9e0bfd.zip |
fix: reset response after reset user values on keep-alive connections (#1176)
Diffstat (limited to 'server.go')
-rw-r--r-- | server.go | 17 |
1 files changed, 12 insertions, 5 deletions
@@ -2079,7 +2079,7 @@ func (s *Server) serveConn(c net.Conn) (err error) { connectionClose bool isHTTP11 bool - reqReset bool + reqReset, respReset bool continueReadingRequest bool = true ) for { @@ -2118,7 +2118,7 @@ func (s *Server) serveConn(c net.Conn) (err error) { br, err = acquireByteReader(&ctx) } - reqReset = false + reqReset, respReset = false, false ctx.Request.isTLS = isTLS ctx.Response.Header.noDefaultContentType = s.NoDefaultContentType ctx.Response.Header.noDefaultDate = s.NoDefaultDate @@ -2403,8 +2403,9 @@ func (s *Server) serveConn(c net.Conn) (err error) { s.setState(c, StateIdle) ctx.userValues.Reset() - reqReset = true + reqReset, respReset = true, true ctx.Request.Reset() + ctx.Response.Reset() if atomic.LoadInt32(&s.stop) == 1 { err = nil @@ -2420,11 +2421,14 @@ func (s *Server) serveConn(c net.Conn) (err error) { } if ctx != nil { // in unexpected cases the for loop will break - // before request reset call. in such cases, call it before + // before request/response reset call. in such cases, call it before // release to fix #548 if !reqReset { ctx.Request.Reset() } + if !respReset { + ctx.Response.Reset() + } s.releaseCtx(ctx) } return @@ -2511,7 +2515,7 @@ func writeResponse(ctx *RequestCtx, w *bufio.Writer) error { panic("BUG: cannot write timed out response") } err := ctx.Response.Write(w) - ctx.Response.Reset() + return err } @@ -2796,8 +2800,11 @@ func (s *Server) writeErrorResponse(bw *bufio.Writer, ctx *RequestCtx, serverNam if bw == nil { bw = acquireWriter(ctx) } + writeResponse(ctx, bw) //nolint:errcheck + ctx.Response.Reset() bw.Flush() + return bw } |