diff --git a/okhttp/src/main/java/io/grpc/okhttp/OkHttpClientStream.java b/okhttp/src/main/java/io/grpc/okhttp/OkHttpClientStream.java index ffa4b316bf..9a299b595e 100644 --- a/okhttp/src/main/java/io/grpc/okhttp/OkHttpClientStream.java +++ b/okhttp/src/main/java/io/grpc/okhttp/OkHttpClientStream.java @@ -190,11 +190,14 @@ class OkHttpClientStream extends Http2ClientStream { } synchronized (lock) { + if (cancelSent) { + return; + } if (pendingData != null) { // Stream is pending start, queue the data. pendingData.add(new PendingData(buffer, endOfStream, flush)); } else { - checkState(id() != 0, "streamId should be set"); + checkState(id() != null, "streamId should be set"); // If buffer > frameWriter.maxDataLength() the flow-controller will ensure that it is // properly chunked. outboundFlow.data(endOfStream, id(), buffer, flush); diff --git a/okhttp/src/test/java/io/grpc/okhttp/OkHttpClientTransportTest.java b/okhttp/src/test/java/io/grpc/okhttp/OkHttpClientTransportTest.java index cf81e9cce6..997d4adf6d 100644 --- a/okhttp/src/test/java/io/grpc/okhttp/OkHttpClientTransportTest.java +++ b/okhttp/src/test/java/io/grpc/okhttp/OkHttpClientTransportTest.java @@ -197,7 +197,7 @@ public class OkHttpClientTransportTest { startTransport(3, null, true, 1); MockStreamListener listener = new MockStreamListener(); - clientTransport.newStream(method, new Metadata.Headers(), listener).request(1); + clientTransport.newStream(method, new Metadata(), listener).request(1); assertContainStream(3); frameHandler().headers(false, false, 3, 0, grpcResponseHeaders(), HeadersMode.HTTP_20_HEADERS); assertNotNull(listener.headers);