This is an automated email from the ASF dual-hosted git repository. remm pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/main by this push: new 46a8745 Simplify 46a8745 is described below commit 46a87456eb9d187c69ee1524c6b8a61e3871807b Author: remm <r...@apache.org> AuthorDate: Tue Jul 27 17:29:08 2021 +0200 Simplify Drop hacks that are no longer needed with Java 11. --- java/org/apache/tomcat/util/net/NioEndpoint.java | 84 +++++++----------------- webapps/docs/changelog.xml | 4 ++ 2 files changed, 26 insertions(+), 62 deletions(-) diff --git a/java/org/apache/tomcat/util/net/NioEndpoint.java b/java/org/apache/tomcat/util/net/NioEndpoint.java index 7865d42..e69fc74 100644 --- a/java/org/apache/tomcat/util/net/NioEndpoint.java +++ b/java/org/apache/tomcat/util/net/NioEndpoint.java @@ -676,10 +676,10 @@ public class NioEndpoint extends AbstractJsseEndpoint<NioChannel,SocketChannel> attachment.interestOps(ops); key.interestOps(ops); } catch (CancelledKeyException ckx) { - cancelledKey(key, socketWrapper); + socketWrapper.close(); } } else { - cancelledKey(key, socketWrapper); + socketWrapper.close(); } } } @@ -711,35 +711,6 @@ public class NioEndpoint extends AbstractJsseEndpoint<NioChannel,SocketChannel> addEvent(event); } - public void cancelledKey(SelectionKey sk, SocketWrapperBase<NioChannel> socketWrapper) { - if (JreCompat.isJre11Available() && socketWrapper != null) { - socketWrapper.close(); - } else { - try { - // If is important to cancel the key first, otherwise a deadlock may occur between the - // poller select and the socket channel close which would cancel the key - // This workaround is not needed on Java 11+ - // TODO: verify, if not fixed in Java 11+ then 14+ is needed, see BZ 64007 - // TODO: the cancelledKey method can be removed with Java 11 as minimum - if (sk != null) { - sk.attach(null); - if (sk.isValid()) { - sk.cancel(); - } - } - } catch (Throwable e) { - ExceptionUtils.handleThrowable(e); - if (log.isDebugEnabled()) { - log.error(sm.getString("endpoint.debug.channelCloseFail"), e); - } - } finally { - if (socketWrapper != null) { - socketWrapper.close(); - } - } - } - } - /** * The background thread that adds sockets to the Poller, checks the * poller for triggered events and hands the associated socket off to an @@ -809,7 +780,7 @@ public class NioEndpoint extends AbstractJsseEndpoint<NioChannel,SocketChannel> protected void processKey(SelectionKey sk, NioSocketWrapper socketWrapper) { try { if (close) { - cancelledKey(sk, socketWrapper); + socketWrapper.close(); } else if (sk.isValid()) { if (sk.isReadable() || sk.isWritable()) { if (socketWrapper.getSendfileData() != null) { @@ -847,16 +818,16 @@ public class NioEndpoint extends AbstractJsseEndpoint<NioChannel,SocketChannel> } } if (closeSocket) { - cancelledKey(sk, socketWrapper); + socketWrapper.close(); } } } } else { // Invalid key - cancelledKey(sk, socketWrapper); + socketWrapper.close(); } } catch (CancelledKeyException ckx) { - cancelledKey(sk, socketWrapper); + socketWrapper.close(); } catch (Throwable t) { ExceptionUtils.handleThrowable(t); log.error(sm.getString("endpoint.nio.keyProcessingError"), t); @@ -924,7 +895,7 @@ public class NioEndpoint extends AbstractJsseEndpoint<NioChannel,SocketChannel> if (log.isDebugEnabled()) { log.debug("Send file connection is being closed"); } - poller.cancelledKey(sk, socketWrapper); + socketWrapper.close(); break; } case PIPELINED: { @@ -932,7 +903,7 @@ public class NioEndpoint extends AbstractJsseEndpoint<NioChannel,SocketChannel> log.debug("Connection is keep alive, processing pipe-lined data"); } if (!processSocket(socketWrapper, SocketEvent.OPEN_READ, true)) { - poller.cancelledKey(sk, socketWrapper); + socketWrapper.close(); } break; } @@ -962,13 +933,13 @@ public class NioEndpoint extends AbstractJsseEndpoint<NioChannel,SocketChannel> log.debug("Unable to complete sendfile request:", e); } if (!calledByProcessor && sc != null) { - poller.cancelledKey(sk, socketWrapper); + socketWrapper.close(); } return SendfileState.ERROR; } catch (Throwable t) { log.error(sm.getString("endpoint.sendfile.error"), t); if (!calledByProcessor && sc != null) { - poller.cancelledKey(sk, socketWrapper); + socketWrapper.close(); } return SendfileState.ERROR; } @@ -1004,12 +975,14 @@ public class NioEndpoint extends AbstractJsseEndpoint<NioChannel,SocketChannel> try { if (socketWrapper == null) { // We don't support any keys without attachments - cancelledKey(key, null); + if (key.isValid()) { + key.cancel(); + } } else if (close) { key.interestOps(0); // Avoid duplicate stop calls socketWrapper.interestOps(0); - cancelledKey(key, socketWrapper); + socketWrapper.close(); } else if ((socketWrapper.interestOps() & SelectionKey.OP_READ) == SelectionKey.OP_READ || (socketWrapper.interestOps() & SelectionKey.OP_WRITE) == SelectionKey.OP_WRITE) { boolean readTimeout = false; @@ -1037,19 +1010,19 @@ public class NioEndpoint extends AbstractJsseEndpoint<NioChannel,SocketChannel> socketWrapper.setError(new SocketTimeoutException()); if (readTimeout && socketWrapper.readOperation != null) { if (!socketWrapper.readOperation.process()) { - cancelledKey(key, socketWrapper); + socketWrapper.close(); } } else if (writeTimeout && socketWrapper.writeOperation != null) { if (!socketWrapper.writeOperation.process()) { - cancelledKey(key, socketWrapper); + socketWrapper.close(); } } else if (!processSocket(socketWrapper, SocketEvent.ERROR, true)) { - cancelledKey(key, socketWrapper); + socketWrapper.close(); } } } } catch (CancelledKeyException ckx) { - cancelledKey(key, socketWrapper); + socketWrapper.close(); } } } catch (ConcurrentModificationException cme) { @@ -1702,23 +1675,23 @@ public class NioEndpoint extends AbstractJsseEndpoint<NioChannel,SocketChannel> state = getHandler().process(socketWrapper, event); } if (state == SocketState.CLOSED) { - poller.cancelledKey(getSelectionKey(), socketWrapper); + socketWrapper.close(); } } else if (handshake == -1 ) { getHandler().process(socketWrapper, SocketEvent.CONNECT_FAIL); - poller.cancelledKey(getSelectionKey(), socketWrapper); + socketWrapper.close(); } else if (handshake == SelectionKey.OP_READ){ socketWrapper.registerReadInterest(); } else if (handshake == SelectionKey.OP_WRITE){ socketWrapper.registerWriteInterest(); } } catch (CancelledKeyException cx) { - poller.cancelledKey(getSelectionKey(), socketWrapper); + socketWrapper.close(); } catch (VirtualMachineError vme) { ExceptionUtils.handleThrowable(vme); } catch (Throwable t) { log.error(sm.getString("endpoint.processing.fail"), t); - poller.cancelledKey(getSelectionKey(), socketWrapper); + socketWrapper.close(); } finally { socketWrapper = null; event = null; @@ -1729,19 +1702,6 @@ public class NioEndpoint extends AbstractJsseEndpoint<NioChannel,SocketChannel> } } - private SelectionKey getSelectionKey() { - // Shortcut for Java 11 onwards - if (JreCompat.isJre11Available()) { - return null; - } - - SocketChannel socketChannel = socketWrapper.getSocket().getIOChannel(); - if (socketChannel == null) { - return null; - } - - return socketChannel.keyFor(NioEndpoint.this.poller.getSelector()); - } } diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml index 2be88c9..5dbb03b 100644 --- a/webapps/docs/changelog.xml +++ b/webapps/docs/changelog.xml @@ -181,6 +181,10 @@ for the connection were dropped. This meant that the connection flow window slowly reduced over time until nothing could be sent. (markt) </fix> + <fix> + Remove NIO workarounds and code that is no longer needed with Java 11. + (remm) + </fix> </changelog> </subsection> <subsection name="Jasper"> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org