diff --git a/http3/server.go b/http3/server.go index 3353f0af2..6773a96c3 100644 --- a/http3/server.go +++ b/http3/server.go @@ -264,6 +264,11 @@ func (s *Server) decreaseConnCount() { // ServeQUICConn serves a single QUIC connection. func (s *Server) ServeQUICConn(conn quic.Connection) error { s.mutex.Lock() + if s.closed { + s.mutex.Unlock() + return http.ErrServerClosed + } + s.init() s.mutex.Unlock() diff --git a/http3/server_test.go b/http3/server_test.go index 3f6f29a3d..43dfc1680 100644 --- a/http3/server_test.go +++ b/http3/server_test.go @@ -883,6 +883,7 @@ var _ = Describe("Server", func() { serv := &Server{} Expect(serv.Close()).To(Succeed()) Expect(serv.ListenAndServeTLS(testdata.GetCertificatePaths())).To(MatchError(http.ErrServerClosed)) + Expect(serv.ServeQUICConn(nil)).To(MatchError(http.ErrServerClosed)) }) It("handles concurrent Serve and Close", func() {