attach content-type to trailer if the trailer is the only response.
diff --git a/transport/http2_server.go b/transport/http2_server.go
index 52d0ee5..28b1e09 100644
--- a/transport/http2_server.go
+++ b/transport/http2_server.go
@@ -456,17 +456,24 @@
// TODO(zhaoq): Now it indicates the end of entire stream. Revisit if early
// OK is adopted.
func (t *http2Server) WriteStatus(s *Stream, statusCode codes.Code, statusDesc string) error {
- s.mu.RLock()
+ var headersSent bool
+ s.mu.Lock()
if s.state == streamDone {
- s.mu.RUnlock()
+ s.mu.Unlock()
return nil
}
- s.mu.RUnlock()
+ if s.headerOk {
+ headersSent = true
+ }
+ s.mu.Unlock()
if _, err := wait(s.ctx, t.shutdownChan, t.writableChan); err != nil {
return err
}
t.hBuf.Reset()
- t.hEnc.WriteField(hpack.HeaderField{Name: ":status", Value: "200"})
+ if !headersSent {
+ t.hEnc.WriteField(hpack.HeaderField{Name: ":status", Value: "200"})
+ t.hEnc.WriteField(hpack.HeaderField{Name: "content-type", Value: "application/grpc"})
+ }
t.hEnc.WriteField(
hpack.HeaderField{
Name: "grpc-status",