It looks like HttpClient can run into a deadlock situation especially if it runs outside of Vert.x context due to the lock ordering between HttpClientRequest and Connection. This seems to happen often enough that it seems to be a major bug.
main is waiting to lock io.vertx.core.http.impl.ClientConnection@701253e3 which is held by vert.x-eventloop-thread-1
vert.x-eventloop-thread-1 is waiting to lock io.vertx.core.http.impl.HttpClientRequestImpl@51f9223b which is held by main
Thread stacks
main [BLOCKED; waiting to lock io.vertx.core.http.impl.ClientConnection@701253e3]
io.vertx.core.net.impl.ConnectionBase.writeToChannel(ConnectionBase.java:101)
io.vertx.core.http.impl.HttpClientRequestImpl.write(HttpClientRequestImpl.java:665)
io.vertx.core.http.impl.HttpClientRequestImpl.write(HttpClientRequestImpl.java:182)
io.vertx.core.http.impl.HttpClientRequestImpl.write(HttpClientRequestImpl.java:56)
vert.x-eventloop-thread-1 [BLOCKED; waiting to lock io.vertx.core.http.impl.HttpClientRequestImpl@51f9223b]
io.vertx.core.http.impl.HttpClientRequestImpl.handleDrained(HttpClientRequestImpl.java:320)
io.vertx.core.http.impl.ClientConnection.handleInterestedOpsChanged(ClientConnection.java:256)
io.vertx.core.net.impl.VertxHandler$$Lambda$138/1356631125.run(unknown source)
io.vertx.core.impl.ContextImpl.lambda$wrapTask$16(ContextImpl.java:333)
io.vertx.core.impl.ContextImpl$$Lambda$11/544152609.run(unknown source)
io.vertx.core.impl.ContextImpl.executeFromIO(ContextImpl.java:225)
io.vertx.core.net.impl.VertxHandler.channelWritabilityChanged(VertxHandler.java:68)
io.netty.channel.AbstractChannelHandlerContext.invokeChannelWritabilityChanged(AbstractChannelHandlerContext.java:376)
io.netty.channel.AbstractChannelHandlerContext.fireChannelWritabilityChanged(AbstractChannelHandlerContext.java:358)
io.netty.channel.ChannelInboundHandlerAdapter.channelWritabilityChanged(ChannelInboundHandlerAdapter.java:119)
io.netty.channel.CombinedChannelDuplexHandler.channelWritabilityChanged(CombinedChannelDuplexHandler.java:202)
io.netty.channel.AbstractChannelHandlerContext.invokeChannelWritabilityChanged(AbstractChannelHandlerContext.java:376)
io.netty.channel.AbstractChannelHandlerContext.fireChannelWritabilityChanged(AbstractChannelHandlerContext.java:358)
io.netty.channel.DefaultChannelPipeline.fireChannelWritabilityChanged(DefaultChannelPipeline.java:861)
io.netty.channel.ChannelOutboundBuffer$2.run(ChannelOutboundBuffer.java:583)
io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:358)
io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:357)
io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:112)
java.lang.Thread.run(Thread.java:744)