Skip to content

Commit 6cd72bf

Browse files
author
Stephane Landelle
committed
Clean up TimeoutTasks content when cancelling, close AsyncHttpClient#682
1 parent c61679f commit 6cd72bf

File tree

2 files changed

+11
-1
lines changed

2 files changed

+11
-1
lines changed

providers/netty/src/main/java/org/asynchttpclient/providers/netty/request/timeout/TimeoutTimerTask.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public abstract class TimeoutTimerTask implements TimerTask {
2626

2727
private static final Logger LOGGER = LoggerFactory.getLogger(TimeoutTimerTask.class);
2828

29-
protected final NettyResponseFuture<?> nettyResponseFuture;
29+
protected volatile NettyResponseFuture<?> nettyResponseFuture;
3030
protected final NettyRequestSender requestSender;
3131
protected final TimeoutsHolder timeoutsHolder;
3232

@@ -43,4 +43,12 @@ protected void expire(String message, long ms) {
4343
LOGGER.debug("{} for {} after {} ms", message, nettyResponseFuture, ms);
4444
requestSender.abort(nettyResponseFuture, new TimeoutException(message));
4545
}
46+
47+
/**
48+
* When the timeout is cancelled, it could still be referenced for quite some time in the Timer.
49+
* Holding a reference to the future might mean holding a reference to the channel, and heavy objects such as SslEngines
50+
*/
51+
public void clean() {
52+
nettyResponseFuture = null;
53+
}
4654
}

providers/netty/src/main/java/org/asynchttpclient/providers/netty/request/timeout/TimeoutsHolder.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,12 @@ public void cancel() {
2727
if (cancelled.compareAndSet(false, true)) {
2828
if (requestTimeout != null) {
2929
requestTimeout.cancel();
30+
RequestTimeoutTimerTask.class.cast(requestTimeout.task()).clean();
3031
requestTimeout = null;
3132
}
3233
if (readTimeout != null) {
3334
readTimeout.cancel();
35+
ReadTimeoutTimerTask.class.cast(readTimeout.task()).clean();
3436
readTimeout = null;
3537
}
3638
}

0 commit comments

Comments
 (0)