You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by rs...@apache.org on 2021/04/02 18:07:54 UTC
[httpcomponents-core] branch master updated: HTTPCORE-672:
H2ConnPool incorrectly handles validation of closed sessions
This is an automated email from the ASF dual-hosted git repository.
rschmitt pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/httpcomponents-core.git
The following commit(s) were added to refs/heads/master by this push:
new b4e29c7 HTTPCORE-672: H2ConnPool incorrectly handles validation of closed sessions
b4e29c7 is described below
commit b4e29c715344ed09af4725cfbf4e36879258f022
Author: Oleg Kalnichevski <ol...@apache.org>
AuthorDate: Fri Apr 2 12:55:16 2021 +0200
HTTPCORE-672: H2ConnPool incorrectly handles validation of closed sessions
---
.../apache/hc/core5/http2/nio/pool/H2ConnPool.java | 28 ++++++++++++----------
.../org/apache/hc/core5/reactor/IOSessionImpl.java | 4 ++++
2 files changed, 20 insertions(+), 12 deletions(-)
diff --git a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/nio/pool/H2ConnPool.java b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/nio/pool/H2ConnPool.java
index 6eac4d0..b1581e9 100644
--- a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/nio/pool/H2ConnPool.java
+++ b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/nio/pool/H2ConnPool.java
@@ -140,20 +140,24 @@ public final class H2ConnPool extends AbstractIOSessionPool<HttpHost> {
protected void validateSession(
final IOSession ioSession,
final Callback<Boolean> callback) {
- final TimeValue timeValue = validateAfterInactivity;
- if (TimeValue.isNonNegative(timeValue)) {
- final long lastAccessTime = Math.min(ioSession.getLastReadTime(), ioSession.getLastWriteTime());
- final long deadline = lastAccessTime + timeValue.toMilliseconds();
- if (deadline <= System.currentTimeMillis()) {
- final Timeout socketTimeoutMillis = ioSession.getSocketTimeout();
- ioSession.enqueue(new PingCommand(new BasicPingHandler(result -> {
- ioSession.setSocketTimeout(socketTimeoutMillis);
- callback.execute(result);
- })), Command.Priority.NORMAL);
- return;
+ if (ioSession.isOpen()) {
+ final TimeValue timeValue = validateAfterInactivity;
+ if (TimeValue.isNonNegative(timeValue)) {
+ final long lastAccessTime = Math.min(ioSession.getLastReadTime(), ioSession.getLastWriteTime());
+ final long deadline = lastAccessTime + timeValue.toMilliseconds();
+ if (deadline <= System.currentTimeMillis()) {
+ final Timeout socketTimeoutMillis = ioSession.getSocketTimeout();
+ ioSession.enqueue(new PingCommand(new BasicPingHandler(result -> {
+ ioSession.setSocketTimeout(socketTimeoutMillis);
+ callback.execute(result);
+ })), Command.Priority.NORMAL);
+ return;
+ }
}
+ callback.execute(true);
+ } else {
+ callback.execute(false);
}
- callback.execute(true);
}
}
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/reactor/IOSessionImpl.java b/httpcore5/src/main/java/org/apache/hc/core5/reactor/IOSessionImpl.java
index f03a61a..c9439cb 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/reactor/IOSessionImpl.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/reactor/IOSessionImpl.java
@@ -108,6 +108,10 @@ class IOSessionImpl implements IOSession {
commandQueue.add(command);
}
setEvent(SelectionKey.OP_WRITE);
+
+ if (isStatusClosed()) {
+ command.cancel();
+ }
}
@Override