Protect bytesSent and bytesReceived with mutex to avoid datarace (#1318)

This commit is contained in:
Menghan Li
2017-06-19 13:57:38 -07:00
committed by GitHub
parent 2887f9478e
commit 40e7a759a0

View File

@ -526,7 +526,9 @@ func (t *http2Client) NewStream(ctx context.Context, callHdr *CallHdr) (_ *Strea
return nil, connectionErrorf(true, err, "transport: %v", err) return nil, connectionErrorf(true, err, "transport: %v", err)
} }
} }
s.mu.Lock()
s.bytesSent = true s.bytesSent = true
s.mu.Unlock()
if t.statsHandler != nil { if t.statsHandler != nil {
outHeader := &stats.OutHeader{ outHeader := &stats.OutHeader{
@ -1009,7 +1011,9 @@ func (t *http2Client) operateHeaders(frame *http2.MetaHeadersFrame) {
if !ok { if !ok {
return return
} }
s.mu.Lock()
s.bytesReceived = true s.bytesReceived = true
s.mu.Unlock()
var state decodeState var state decodeState
if err := state.decodeResponseHeader(frame); err != nil { if err := state.decodeResponseHeader(frame); err != nil {
s.mu.Lock() s.mu.Lock()