From 572005380768e0f6541adce89854e140e5dadc5a Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Tue, 2 Jun 2020 14:39:48 +0700 Subject: [PATCH] simplify stream handling in the http3.Server --- http3/server.go | 11 +++-------- http3/server_test.go | 2 ++ 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/http3/server.go b/http3/server.go index 9ae1efe23..cb0f16e2b 100644 --- a/http3/server.go +++ b/http3/server.go @@ -276,7 +276,7 @@ func (s *Server) handleRequest(sess quic.Session, str quic.Stream, decoder *qpac handler = http.DefaultServeMux } - var panicked, readEOF bool + var panicked bool func() { defer func() { if p := recover(); p != nil { @@ -289,10 +289,6 @@ func (s *Server) handleRequest(sess quic.Session, str quic.Stream, decoder *qpac } }() handler.ServeHTTP(responseWriter, req) - // read the eof - if _, err = str.Read([]byte{0}); err == io.EOF { - readEOF = true - } }() if panicked { @@ -301,9 +297,8 @@ func (s *Server) handleRequest(sess quic.Session, str quic.Stream, decoder *qpac responseWriter.WriteHeader(200) } - if !readEOF { - str.CancelRead(quic.ErrorCode(errorEarlyResponse)) - } + // If the EOF was read by the handler, CancelRead() is a no-op. + str.CancelRead(quic.ErrorCode(errorEarlyResponse)) return requestError{} } diff --git a/http3/server_test.go b/http3/server_test.go index 6f8e216bb..6bd15a8f3 100644 --- a/http3/server_test.go +++ b/http3/server_test.go @@ -122,6 +122,7 @@ var _ = Describe("Server", func() { str.EXPECT().Write(gomock.Any()).DoAndReturn(func(p []byte) (int, error) { return len(p), nil }).AnyTimes() + str.EXPECT().CancelRead(gomock.Any()) Expect(s.handleRequest(sess, str, qpackDecoder, nil)).To(Equal(requestError{})) var req *http.Request @@ -140,6 +141,7 @@ var _ = Describe("Server", func() { str.EXPECT().Write(gomock.Any()).DoAndReturn(func(p []byte) (int, error) { return responseBuf.Write(p) }).AnyTimes() + str.EXPECT().CancelRead(gomock.Any()) serr := s.handleRequest(sess, str, qpackDecoder, nil) Expect(serr.err).ToNot(HaveOccurred())