reset streams that the request body is not read from

fixes #384
This commit is contained in:
Marten Seemann
2017-01-09 23:47:01 +07:00
parent d541472101
commit 64bc80339e
5 changed files with 115 additions and 6 deletions

View File

@@ -4,7 +4,6 @@ import (
"crypto/tls"
"errors"
"fmt"
"io/ioutil"
"net"
"net/http"
"runtime"
@@ -155,13 +154,14 @@ func (s *Server) handleRequest(session streamCreator, headerStream utils.Stream,
return err
}
var streamEnded bool
if h2headersFrame.StreamEnded() {
dataStream.CloseRemote(0)
streamEnded = true
_, _ = dataStream.Read([]byte{0}) // read the eof
}
// stream's Close() closes the write side, not the read side
req.Body = ioutil.NopCloser(dataStream)
req.Body = newRequestBody(dataStream)
responseWriter := newResponseWriter(headerStream, headerStreamMutex, dataStream, protocol.StreamID(h2headersFrame.StreamID))
@@ -190,6 +190,9 @@ func (s *Server) handleRequest(session streamCreator, headerStream utils.Stream,
responseWriter.WriteHeader(200)
}
if responseWriter.dataStream != nil {
if !streamEnded && !req.Body.(*requestBody).requestRead {
responseWriter.dataStream.Reset(nil)
}
responseWriter.dataStream.Close()
}
if s.CloseAfterFirstRequest {