From 1966d5b7f3166533b07178801c5ce1018da48847 Mon Sep 17 00:00:00 2001 From: simonma Date: Fri, 8 Aug 2014 14:51:01 -0700 Subject: [PATCH] Make sure Stream.cancel() can be called multiple times. ------------- Created by MOE: http://code.google.com/p/moe-java MOE_MIGRATED_REVID=72928049 --- .../stubby/newtransport/okhttp/OkHttpClientTransport.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/com/google/net/stubby/newtransport/okhttp/OkHttpClientTransport.java b/core/src/main/java/com/google/net/stubby/newtransport/okhttp/OkHttpClientTransport.java index 6acddf8d00..292adc304a 100644 --- a/core/src/main/java/com/google/net/stubby/newtransport/okhttp/OkHttpClientTransport.java +++ b/core/src/main/java/com/google/net/stubby/newtransport/okhttp/OkHttpClientTransport.java @@ -14,6 +14,7 @@ import com.google.net.stubby.newtransport.ClientStream; import com.google.net.stubby.newtransport.ClientTransport; import com.google.net.stubby.newtransport.InputStreamDeframer; import com.google.net.stubby.newtransport.StreamListener; +import com.google.net.stubby.newtransport.StreamState; import com.google.net.stubby.transport.Transport; import com.google.net.stubby.transport.Transport.Code; @@ -425,7 +426,10 @@ public class OkHttpClientTransport extends AbstractClientTransport { @Override public void cancel() { - Preconditions.checkState(streamId != 0, "streamId should be set"); + if (streamId == 0) { + // This should only happens when the stream was failed in constructor. + Preconditions.checkState(state() == StreamState.CLOSED, "A unclosed stream has no id"); + } outboundPhase = Phase.STATUS; if (finishStream(streamId, toGrpcStatus(ErrorCode.CANCEL))) { frameWriter.rstStream(streamId, ErrorCode.CANCEL);