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 2019/09/18 10:56:51 UTC

[httpcomponents-core] 01/01: Regression: fixed regression in SingleCoreIOReactor leading to unhandled CancelledKeyException and causing abnormal I/O reactor termination

This is an automated email from the ASF dual-hosted git repository.

olegk pushed a commit to branch bug-fixes
in repository https://gitbox.apache.org/repos/asf/httpcomponents-core.git

commit 98521e0e8cb40f70f217dce20e3f5a332203f905
Author: Oleg Kalnichevski <ol...@apache.org>
AuthorDate: Wed Sep 18 12:53:30 2019 +0200

    Regression: fixed regression in SingleCoreIOReactor leading to unhandled CancelledKeyException and causing abnormal I/O reactor termination
---
 .../main/java/org/apache/hc/core5/reactor/SingleCoreIOReactor.java | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/httpcore5/src/main/java/org/apache/hc/core5/reactor/SingleCoreIOReactor.java b/httpcore5/src/main/java/org/apache/hc/core5/reactor/SingleCoreIOReactor.java
index 8b92321..7d10b29 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/reactor/SingleCoreIOReactor.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/reactor/SingleCoreIOReactor.java
@@ -48,6 +48,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
 import org.apache.hc.core5.concurrent.FutureCallback;
 import org.apache.hc.core5.function.Callback;
 import org.apache.hc.core5.function.Decorator;
+import org.apache.hc.core5.io.CloseMode;
 import org.apache.hc.core5.io.Closer;
 import org.apache.hc.core5.net.NamedEndpoint;
 import org.apache.hc.core5.util.Args;
@@ -174,7 +175,11 @@ class SingleCoreIOReactor extends AbstractSingleCoreIOReactor implements Connect
         for (final SelectionKey key : selectedKeys) {
             final InternalChannel channel = (InternalChannel) key.attachment();
             if (channel != null) {
-                channel.handleIOEvent(key.readyOps());
+                try {
+                    channel.handleIOEvent(key.readyOps());
+                } catch (final CancelledKeyException ex) {
+                    close(CloseMode.GRACEFUL);
+                }
             }
         }
         selectedKeys.clear();