From c3125bebdbbf147bb7a324b8bd58b10f29713d78 Mon Sep 17 00:00:00 2001 From: Xudong Ma Date: Wed, 13 May 2015 14:32:31 -0700 Subject: [PATCH] okhttp: send reset when client receives halfClose from server before sending halfClose. So that the server side stream can be fully closed. This fixed #300 --- .../java/io/grpc/transport/okhttp/OkHttpClientStream.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/okhttp/src/main/java/io/grpc/transport/okhttp/OkHttpClientStream.java b/okhttp/src/main/java/io/grpc/transport/okhttp/OkHttpClientStream.java index 718c47dc47..c0dd010aec 100644 --- a/okhttp/src/main/java/io/grpc/transport/okhttp/OkHttpClientStream.java +++ b/okhttp/src/main/java/io/grpc/transport/okhttp/OkHttpClientStream.java @@ -208,6 +208,11 @@ class OkHttpClientStream extends Http2ClientStream { @Override public void remoteEndClosed() { super.remoteEndClosed(); + if (canSend()) { + // If server's end-of-stream is received before client sends end-of-stream, we just send a + // reset to server to fully close the server side stream. + frameWriter.rstStream(id(), ErrorCode.CANCEL); + } transport.finishStream(id(), null, null); }