aboutsummaryrefslogtreecommitdiff
path: root/server.go
diff options
context:
space:
mode:
authorGravatar Sergio VS <savsgio.engineer@gmail.com> 2021-12-16 05:27:02 +0100
committerGravatar GitHub <noreply@github.com> 2021-12-16 05:27:02 +0100
commit258a4c17b4f451f9a1f9bae3f34d3f5d6e9e0bfd (patch)
treea3f997786dd12d755c28d7771567b7fe4607be58 /server.go
parentUse %w to wrap errors (#1175) (diff)
downloadfasthttp-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.go17
1 files changed, 12 insertions, 5 deletions
diff --git a/server.go b/server.go
index 928702c..edbd699 100644
--- a/server.go
+++ b/server.go
@@ -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
}