This is an automated email from the ASF dual-hosted git repository.
remm pushed a commit to branch 9.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/9.0.x by this push:
new 9535eb3 Optimized selector handling for Java 11
9535eb3 is described below
commit 9535eb304d5b359c8e23ae87eb6b4612e9bb608d
Author: remm <[email protected]>
AuthorDate: Thu May 27 10:55:55 2021 +0200
Optimized selector handling for Java 11
Hopefully well tested with Tomcat 10.
---
java/org/apache/tomcat/util/net/NioEndpoint.java | 42 +++++++++++++++---------
webapps/docs/changelog.xml | 3 ++
2 files changed, 29 insertions(+), 16 deletions(-)
diff --git a/java/org/apache/tomcat/util/net/NioEndpoint.java
b/java/org/apache/tomcat/util/net/NioEndpoint.java
index e8b017b..234747c 100644
--- a/java/org/apache/tomcat/util/net/NioEndpoint.java
+++ b/java/org/apache/tomcat/util/net/NioEndpoint.java
@@ -739,23 +739,28 @@ public class NioEndpoint extends
AbstractJsseEndpoint<NioChannel,SocketChannel>
}
public void cancelledKey(SelectionKey sk,
SocketWrapperBase<NioChannel> socketWrapper) {
- 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
- if (sk != null) {
- sk.attach(null);
- if (sk.isValid()) {
- sk.cancel();
+ 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+
+ 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();
}
- }
- } catch (Throwable e) {
- ExceptionUtils.handleThrowable(e);
- if (log.isDebugEnabled()) {
- log.error(sm.getString("endpoint.debug.channelCloseFail"),
e);
- }
- } finally {
- if (socketWrapper != null) {
- socketWrapper.close();
}
}
}
@@ -1746,6 +1751,11 @@ 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;
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index 91731c9..6a2f068 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -174,6 +174,9 @@
Add back simplification of NIO block read and write, now better
validated in Tomcat 10. (remm)
</update>
+ <fix>
+ Optimize NIO selector handling for Java 11. (remm)
+ </fix>
</changelog>
</subsection>
<subsection name="Jasper">
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]