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 8622c50a7..03de8716b 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 @@ -171,6 +171,9 @@ public SocketAddress getRemoteAddress() { @Override public int getEventMask() { + if (isStatusClosed()) { + return 0; + } return this.key.interestOps(); } diff --git a/httpcore5/src/test/java/org/apache/hc/core5/reactor/TestIOSessionImpl.java b/httpcore5/src/test/java/org/apache/hc/core5/reactor/TestIOSessionImpl.java index 92ed454ab..d92c14d6a 100644 --- a/httpcore5/src/test/java/org/apache/hc/core5/reactor/TestIOSessionImpl.java +++ b/httpcore5/src/test/java/org/apache/hc/core5/reactor/TestIOSessionImpl.java @@ -246,6 +246,20 @@ void eventMaskHelpersWork() throws Exception { } } + @Test + @SuppressWarnings("resource") + void eventMaskIsEmptyOnceClosed() throws Exception { + try (Selector selector = Selector.open(); + SocketChannel channel = SocketChannel.open()) { + channel.configureBlocking(false); + final SelectionKey key = channel.register(selector, SelectionKey.OP_READ); + final IOSessionImpl session = new IOSessionImpl("t", key, channel, null); + session.close(CloseMode.IMMEDIATE); + + Assertions.assertEquals(0, session.getEventMask()); + } + } + @Test @SuppressWarnings("resource") void toStringIncludesStatus() throws Exception {