Merge pull request #1071 from nmittler/flaky_test
Fixing flaky test Http2NettyTest.deadlineExceeded()
diff --git a/core/src/main/java/io/grpc/internal/AbstractClientStream.java b/core/src/main/java/io/grpc/internal/AbstractClientStream.java
index 98a71e5..666a86f 100644
--- a/core/src/main/java/io/grpc/internal/AbstractClientStream.java
+++ b/core/src/main/java/io/grpc/internal/AbstractClientStream.java
@@ -60,6 +60,7 @@
private Status status;
private Metadata trailers;
private Runnable closeListenerTask;
+ private volatile boolean cancelled;
protected AbstractClientStream(WritableBufferAllocator bufferAllocator,
ClientStreamListener listener,
@@ -293,11 +294,16 @@
@Override
public final void cancel(Status reason) {
checkArgument(CANCEL_REASONS.contains(reason.getCode()), "Invalid cancellation reason");
- outboundPhase(Phase.STATUS);
+ cancelled = true;
sendCancel(reason);
dispose();
}
+ @Override
+ public final boolean isReady() {
+ return !cancelled && super.isReady();
+ }
+
/**
* Cancel the stream and send a stream cancellation message to the remote server, if necessary.
* Can be called by either the application or transport layers. This method is safe to be called
diff --git a/core/src/main/java/io/grpc/internal/AbstractStream.java b/core/src/main/java/io/grpc/internal/AbstractStream.java
index d209fa4..3611ef2 100644
--- a/core/src/main/java/io/grpc/internal/AbstractStream.java
+++ b/core/src/main/java/io/grpc/internal/AbstractStream.java
@@ -176,7 +176,7 @@
}
@Override
- public final boolean isReady() {
+ public boolean isReady() {
if (listener() != null && outboundPhase() != Phase.STATUS) {
synchronized (onReadyLock) {
return allocated && numSentBytesQueued < onReadyThreshold;