diff --git a/core/src/main/java/com/linecorp/armeria/client/Http2ResponseDecoder.java b/core/src/main/java/com/linecorp/armeria/client/Http2ResponseDecoder.java index 776d5de13ca..be166592ff6 100644 --- a/core/src/main/java/com/linecorp/armeria/client/Http2ResponseDecoder.java +++ b/core/src/main/java/com/linecorp/armeria/client/Http2ResponseDecoder.java @@ -185,7 +185,7 @@ public void onHeadersRead(ChannelHandlerContext ctx, int streamId, Http2Headers boolean endOfStream) throws Http2Exception { keepAliveChannelRead(); final HttpResponseWrapper res = getResponse(streamIdToId(streamId), endOfStream); - if (res == null) { + if (res == null || !res.isOpen()) { if (conn.streamMayHaveExisted(streamId)) { if (logger.isDebugEnabled()) { logger.debug("{} Received a late HEADERS frame for a closed stream: {}", @@ -234,7 +234,7 @@ public int onDataRead( final int dataLength = data.readableBytes(); final HttpResponseWrapper res = getResponse(streamIdToId(streamId), endOfStream); - if (res == null) { + if (res == null || !res.isOpen()) { if (conn.streamMayHaveExisted(streamId)) { if (logger.isDebugEnabled()) { logger.debug("{} Received a late DATA frame for a closed stream: {}", @@ -295,7 +295,7 @@ private boolean shouldSendGoAway() { public void onRstStreamRead(ChannelHandlerContext ctx, int streamId, long errorCode) throws Http2Exception { keepAliveChannelRead(); final HttpResponseWrapper res = removeResponse(streamIdToId(streamId)); - if (res == null) { + if (res == null || !res.isOpen()) { if (conn.streamMayHaveExisted(streamId)) { if (logger.isDebugEnabled()) { logger.debug("{} Received a late RST_STREAM frame for a closed stream: {}",