From f7515ef724ec442fc9942c3c85e3fa62a9163efc Mon Sep 17 00:00:00 2001 From: Zach Reyes Date: Mon, 11 Jul 2022 14:04:27 -0400 Subject: [PATCH] Fixed stream.fc being nil --- internal/transport/http2_client.go | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/internal/transport/http2_client.go b/internal/transport/http2_client.go index 03691ef1b20..8d3cf3664a7 100644 --- a/internal/transport/http2_client.go +++ b/internal/transport/http2_client.go @@ -685,8 +685,6 @@ func (t *http2Client) NewStream(ctx context.Context, callHdr *CallHdr) (*Stream, cleanup(err) return err } - s.fc = &inFlow{limit: uint32(t.initialWindowSize)} - t.activeStreams[id] = s if channelz.IsOn() { atomic.AddInt64(&t.czData.streamsStarted, 1) atomic.StoreInt64(&t.czData.lastStreamCreatedTime, time.Now().UnixNano()) @@ -719,6 +717,12 @@ func (t *http2Client) NewStream(ctx context.Context, callHdr *CallHdr) (*Stream, h.streamID = t.nextID t.nextID += 2 s.id = h.streamID + s.fc = &inFlow{limit: uint32(t.initialWindowSize)} + t.mu.Lock() + if t.activeStreams != nil { // Can be niled from Close() + t.activeStreams[s.id] = s + } + t.mu.Unlock() if t.streamQuota > 0 && t.waitingStreams > 0 { select { case t.streamsQuotaAvailable <- struct{}{}: @@ -744,10 +748,10 @@ func (t *http2Client) NewStream(ctx context.Context, callHdr *CallHdr) (*Stream, } for { success, err := t.controlBuf.executeAndPut(func(it interface{}) bool { - if !checkForStreamQuota(it) { + if !checkForHeaderListSize(it) { return false } - if !checkForHeaderListSize(it) { + if !checkForStreamQuota(it) { return false } return true