From 2d5c4dfb95aa37f8628a7be7c990ffe366370619 Mon Sep 17 00:00:00 2001 From: Doug Fawley <dfawley@google.com> Date: Thu, 14 Mar 2019 15:15:50 -0700 Subject: [PATCH] server: send RST_STREAM after trailers if client has not half-closed (#2684) Fixes #834 --- internal/transport/http2_server.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/internal/transport/http2_server.go b/internal/transport/http2_server.go index 19ff6edc..8072aff4 100644 --- a/internal/transport/http2_server.go +++ b/internal/transport/http2_server.go @@ -840,7 +840,9 @@ func (t *http2Server) WriteStatus(s *Stream, st *status.Status) error { t.closeStream(s, true, http2.ErrCodeInternal, nil, false) return ErrHeaderListSizeLimitViolation } - t.closeStream(s, false, 0, trailingHeader, true) + // Send a RST_STREAM after the trailers if the client has not already half-closed. + rst := s.getState() == streamActive + t.closeStream(s, rst, http2.ErrCodeNo, trailingHeader, true) if t.stats != nil { t.stats.HandleRPC(s.Context(), &stats.OutTrailer{}) }