You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2021/04/02 18:26:00 UTC
[httpcomponents-core] branch 5.0.x updated: HTTPCORE-672:
H2ConnPool incorrectly handles validation of closed sessions
This is an automated email from the ASF dual-hosted git repository.
olegk pushed a commit to branch 5.0.x
in repository https://gitbox.apache.org/repos/asf/httpcomponents-core.git
The following commit(s) were added to refs/heads/5.0.x by this push:
new c27944b HTTPCORE-672: H2ConnPool incorrectly handles validation of closed sessions
c27944b is described below
commit c27944b72447e3f59cdf780f6337ddadc6ed0dcc
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 | 38 ++++++++++++----------
.../org/apache/hc/core5/reactor/IOSessionImpl.java | 4 +++
2 files changed, 25 insertions(+), 17 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 6c7d761..d1bbcae 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
@@ -136,25 +136,29 @@ 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(new Callback<Boolean>() {
-
- @Override
- public void execute(final Boolean 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(new Callback<Boolean>() {
+
+ @Override
+ public void execute(final Boolean 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 5f7be0a..8674336 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