Skip to content

Commit 871aa74

Browse files
committed
Don't flush request when there's a body following, close AsyncHttpClient#1046
1 parent 01d6a08 commit 871aa74

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

client/src/main/java/org/asynchttpclient/netty/request/NettyRequestSender.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
import static org.asynchttpclient.util.ProxyUtils.getProxyServer;
2222
import io.netty.bootstrap.Bootstrap;
2323
import io.netty.channel.Channel;
24+
import io.netty.channel.ChannelFuture;
25+
import io.netty.channel.ChannelProgressivePromise;
2426
import io.netty.handler.codec.http.DefaultHttpHeaders;
2527
import io.netty.handler.codec.http.HttpHeaders;
2628
import io.netty.handler.codec.http.HttpMethod;
@@ -325,14 +327,18 @@ public <T> void writeRequest(NettyResponseFuture<T> future, Channel channel) {
325327
if (handler instanceof TransferCompletionHandler)
326328
configureTransferAdapter(handler, httpRequest);
327329

330+
boolean writeBody = !future.isDontWriteBodyBecauseExpectContinue() && httpRequest.getMethod() != HttpMethod.CONNECT && nettyRequest.getBody() != null;
331+
328332
if (!future.isHeadersAlreadyWrittenOnContinue()) {
329333
if (future.getAsyncHandler() instanceof AsyncHandlerExtensions)
330334
AsyncHandlerExtensions.class.cast(future.getAsyncHandler()).onRequestSend(nettyRequest);
331335

332-
channel.writeAndFlush(httpRequest, channel.newProgressivePromise()).addListener(new ProgressListener(future.getAsyncHandler(), future, true, 0L));
336+
ChannelProgressivePromise promise = channel.newProgressivePromise();
337+
ChannelFuture f = writeBody ? channel.write(httpRequest, promise) : channel.writeAndFlush(httpRequest, promise);
338+
f.addListener(new ProgressListener(future.getAsyncHandler(), future, true, 0L));
333339
}
334340

335-
if (!future.isDontWriteBodyBecauseExpectContinue() && httpRequest.getMethod() != HttpMethod.CONNECT && nettyRequest.getBody() != null)
341+
if (writeBody)
336342
nettyRequest.getBody().write(channel, future);
337343

338344
// don't bother scheduling timeouts if channel became invalid

0 commit comments

Comments
 (0)