diff --git a/transport/http2_client.go b/transport/http2_client.go index 62a6fa28..b6b744d5 100644 --- a/transport/http2_client.go +++ b/transport/http2_client.go @@ -308,6 +308,14 @@ func (t *http2Client) NewStream(ctx context.Context, callHdr *CallHdr) (_ *Strea return nil, err } t.mu.Lock() + if t.state == draining { + t.mu.Unlock() + // t has been drained. Return the quota. + t.streamsQuota.add(1) + // Need to make t writable again so that the rpc in flight can still proceed. + t.writableChan <- 0 + return nil, ErrStreamDrain + } if t.state != reachable { t.mu.Unlock() return nil, ErrConnClosing