Skip to content

Commit 321f3c0

Browse files
author
Stephane Landelle
committed
Prevent multiple close of AsyncHttpProvider and NettyAsyncHttpProvider, close AsyncHttpClient#191
1 parent 4066b17 commit 321f3c0

File tree

2 files changed

+27
-25
lines changed

2 files changed

+27
-25
lines changed

src/main/java/com/ning/http/client/AsyncHttpClient.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -365,8 +365,9 @@ public AsyncHttpProvider getProvider() {
365365
* Close the underlying connections.
366366
*/
367367
public void close() {
368-
httpProvider.close();
369-
isClosed.set(true);
368+
if (isClosed.compareAndSet(false, true)) {
369+
httpProvider.close();
370+
}
370371
}
371372

372373
/**

src/main/java/com/ning/http/client/providers/netty/NettyAsyncHttpProvider.java

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -875,33 +875,34 @@ else if (uri.getRawQuery() != null)
875875
}
876876

877877
public void close() {
878-
isClose.set(true);
879-
try {
880-
connectionsPool.destroy();
881-
openChannels.close();
882-
883-
for (Channel channel : openChannels) {
884-
ChannelHandlerContext ctx = channel.getPipeline().getContext(NettyAsyncHttpProvider.class);
885-
if (ctx.getAttachment() instanceof NettyResponseFuture<?>) {
886-
NettyResponseFuture<?> future = (NettyResponseFuture<?>) ctx.getAttachment();
887-
future.cancelTimeouts();
878+
if (isClose.compareAndSet(false, true)) {
879+
try {
880+
connectionsPool.destroy();
881+
openChannels.close();
882+
883+
for (Channel channel : openChannels) {
884+
ChannelHandlerContext ctx = channel.getPipeline().getContext(NettyAsyncHttpProvider.class);
885+
if (ctx.getAttachment() instanceof NettyResponseFuture<?>) {
886+
NettyResponseFuture<?> future = (NettyResponseFuture<?>) ctx.getAttachment();
887+
future.cancelTimeouts();
888+
}
888889
}
889-
}
890890

891-
config.executorService().shutdown();
892-
config.reaper().shutdown();
893-
if (this.allowReleaseSocketChannelFactory) {
894-
socketChannelFactory.releaseExternalResources();
895-
plainBootstrap.releaseExternalResources();
896-
secureBootstrap.releaseExternalResources();
897-
webSocketBootstrap.releaseExternalResources();
898-
secureWebSocketBootstrap.releaseExternalResources();
899-
}
891+
config.executorService().shutdown();
892+
config.reaper().shutdown();
893+
if (this.allowReleaseSocketChannelFactory) {
894+
socketChannelFactory.releaseExternalResources();
895+
plainBootstrap.releaseExternalResources();
896+
secureBootstrap.releaseExternalResources();
897+
webSocketBootstrap.releaseExternalResources();
898+
secureWebSocketBootstrap.releaseExternalResources();
899+
}
900900

901-
hashedWheelTimer.stop();
901+
hashedWheelTimer.stop();
902902

903-
} catch (Throwable t) {
904-
log.warn("Unexpected error on close", t);
903+
} catch (Throwable t) {
904+
log.warn("Unexpected error on close", t);
905+
}
905906
}
906907
}
907908

0 commit comments

Comments
 (0)