From b8169e75807d42429ebf4592570b59e96e6715f7 Mon Sep 17 00:00:00 2001 From: Menghan Li Date: Wed, 28 Jul 2021 10:12:57 -0700 Subject: [PATCH] [transport_race] transport: fix race accessing s.recvCompress --- internal/transport/http2_client.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/internal/transport/http2_client.go b/internal/transport/http2_client.go index fa41fec903ee..0cd6da1e73f7 100644 --- a/internal/transport/http2_client.go +++ b/internal/transport/http2_client.go @@ -1301,6 +1301,7 @@ func (t *http2Client) operateHeaders(frame *http2.MetaHeadersFrame) { contentTypeErr = "malformed header: missing HTTP content-type" grpcMessage string statusGen *status.Status + recvCompress string httpStatusCode *int httpStatusErr string rawStatusCode = codes.Unknown @@ -1323,7 +1324,7 @@ func (t *http2Client) operateHeaders(frame *http2.MetaHeadersFrame) { mdata[hf.Name] = append(mdata[hf.Name], hf.Value) isGRPC = true case "grpc-encoding": - s.recvCompress = hf.Value + recvCompress = hf.Value case "grpc-status": code, err := strconv.ParseInt(hf.Value, 10, 32) if err != nil { @@ -1436,6 +1437,7 @@ func (t *http2Client) operateHeaders(frame *http2.MetaHeadersFrame) { // These values can be set without any synchronization because // stream goroutine will read it only after seeing a closed // headerChan which we'll close after setting this. + s.recvCompress = recvCompress if len(mdata) > 0 { s.header = mdata }