Extra sage-guards for concurrent connection endpoint acquisition and request execution cancellation
diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/classic/InternalExecRuntime.java b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/classic/InternalExecRuntime.java
index abd8afe..299f56d 100644
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/classic/InternalExecRuntime.java
+++ b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/classic/InternalExecRuntime.java
@@ -103,11 +103,11 @@
final LeaseRequest connRequest = manager.lease(id, route, connectionRequestTimeout, object);
state = object;
if (cancellableDependency != null) {
+ cancellableDependency.setDependency(connRequest);
if (cancellableDependency.isCancelled()) {
connRequest.cancel();
throw new RequestFailedException("Request aborted");
}
- cancellableDependency.setDependency(connRequest);
}
try {
final ConnectionEndpoint connectionEndpoint = connRequest.get(connectionRequestTimeout);
@@ -115,6 +115,10 @@
reusable = connectionEndpoint.isConnected();
if (cancellableDependency != null) {
cancellableDependency.setDependency(this);
+ if (cancellableDependency.isCancelled()) {
+ cancel();
+ throw new RequestFailedException("Request aborted");
+ }
}
if (log.isDebugEnabled()) {
log.debug("{}: acquired endpoint {}", id, ConnPoolSupport.getId(connectionEndpoint));