Skip to content

Commit 481da9f

Browse files
committed
make sure we don't try to reuse channel when request body is a stream
1 parent 38a6182 commit 481da9f

File tree

1 file changed

+9
-8
lines changed

1 file changed

+9
-8
lines changed

client/src/main/java/org/asynchttpclient/netty/handler/HttpProtocol.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -466,32 +466,32 @@ private boolean exitAfterHandlingConnect(//
466466
return false;
467467
}
468468

469-
private boolean exitAfterHandlingStatus(Channel channel, NettyResponseFuture<?> future, HttpResponse response, AsyncHandler<?> handler, NettyResponseStatus status)
469+
private boolean exitAfterHandlingStatus(Channel channel, NettyResponseFuture<?> future, HttpResponse response, AsyncHandler<?> handler, NettyResponseStatus status, HttpRequest httpRequest)
470470
throws IOException, Exception {
471471
if (!future.getAndSetStatusReceived(true) && handler.onStatusReceived(status) != State.CONTINUE) {
472-
finishUpdate(future, channel, HttpHeaders.isTransferEncodingChunked(response));
472+
finishUpdate(future, channel, HttpHeaders.isTransferEncodingChunked(httpRequest) || HttpHeaders.isTransferEncodingChunked(response));
473473
return true;
474474
}
475475
return false;
476476
}
477477

478-
private boolean exitAfterHandlingHeaders(Channel channel, NettyResponseFuture<?> future, HttpResponse response, AsyncHandler<?> handler, NettyResponseHeaders responseHeaders)
478+
private boolean exitAfterHandlingHeaders(Channel channel, NettyResponseFuture<?> future, HttpResponse response, AsyncHandler<?> handler, NettyResponseHeaders responseHeaders, HttpRequest httpRequest)
479479
throws IOException, Exception {
480480
if (!response.headers().isEmpty() && handler.onHeadersReceived(responseHeaders) != State.CONTINUE) {
481-
finishUpdate(future, channel, HttpHeaders.isTransferEncodingChunked(response));
481+
finishUpdate(future, channel, HttpHeaders.isTransferEncodingChunked(httpRequest) || HttpHeaders.isTransferEncodingChunked(response));
482482
return true;
483483
}
484484
return false;
485485
}
486486

487-
private boolean exitAfterHandlingReactiveStreams(Channel channel, NettyResponseFuture<?> future, HttpResponse response, AsyncHandler<?> handler) throws IOException {
487+
private boolean exitAfterHandlingReactiveStreams(Channel channel, NettyResponseFuture<?> future, HttpResponse response, AsyncHandler<?> handler, HttpRequest httpRequest) throws IOException {
488488
if (handler instanceof StreamedAsyncHandler) {
489489
StreamedAsyncHandler<?> streamedAsyncHandler = (StreamedAsyncHandler<?>) handler;
490490
StreamedResponsePublisher publisher = new StreamedResponsePublisher(channel.eventLoop(), channelManager, future, channel);
491491
channel.pipeline().addLast(channel.eventLoop(), "streamedAsyncHandler", publisher);
492492
Channels.setAttribute(channel, publisher);
493493
if (streamedAsyncHandler.onStream(publisher) != State.CONTINUE) {
494-
finishUpdate(future, channel, HttpHeaders.isTransferEncodingChunked(response));
494+
finishUpdate(future, channel, HttpHeaders.isTransferEncodingChunked(httpRequest) || HttpHeaders.isTransferEncodingChunked(response));
495495
return true;
496496
}
497497
}
@@ -522,8 +522,9 @@ private boolean handleHttpResponse(final HttpResponse response, final Channel ch
522522
exitAfterHandling100(channel, future, statusCode) || //
523523
exitAfterHandlingRedirect(channel, future, response, request, statusCode, realm) || //
524524
exitAfterHandlingConnect(channel, future, request, proxyServer, statusCode, httpRequest) || //
525-
exitAfterHandlingStatus(channel, future, response, handler, status) || //
526-
exitAfterHandlingHeaders(channel, future, response, handler, responseHeaders) || exitAfterHandlingReactiveStreams(channel, future, response, handler);
525+
exitAfterHandlingStatus(channel, future, response, handler, status, httpRequest) || //
526+
exitAfterHandlingHeaders(channel, future, response, handler, responseHeaders, httpRequest) || //
527+
exitAfterHandlingReactiveStreams(channel, future, response, handler, httpRequest);
527528
}
528529

529530
private void handleChunk(HttpContent chunk,//

0 commit comments

Comments
 (0)