From 41cc01890da08993bb681d1e73f5701bd53d94cf Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Tue, 29 Apr 2025 18:05:14 +0800 Subject: [PATCH] http3: return http.ErrServerClosed for ServeQUICConn after Server.Close (#5095) --- http3/server.go | 5 +++++ http3/server_test.go | 1 + 2 files changed, 6 insertions(+) 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() {