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

remm pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/master by this push:
     new 404a3a6  Remove sync
404a3a6 is described below

commit 404a3a6366c0a8ba3e747db57e24dee271c44ac3
Author: remm <r...@apache.org>
AuthorDate: Tue Mar 17 18:06:23 2020 +0100

    Remove sync
    
    keyFor syncs on a global lock, so remove it when processing sockets.
---
 java/org/apache/tomcat/util/net/NioEndpoint.java | 50 +++++++++++-------------
 webapps/docs/changelog.xml                       |  4 ++
 2 files changed, 27 insertions(+), 27 deletions(-)

diff --git a/java/org/apache/tomcat/util/net/NioEndpoint.java 
b/java/org/apache/tomcat/util/net/NioEndpoint.java
index f753b9a..7012782 100644
--- a/java/org/apache/tomcat/util/net/NioEndpoint.java
+++ b/java/org/apache/tomcat/util/net/NioEndpoint.java
@@ -1530,33 +1530,29 @@ public class NioEndpoint extends 
AbstractJsseEndpoint<NioChannel,SocketChannel>
                 socketWrapper.close();
                 return;
             }
-            SelectionKey key = 
socket.getIOChannel().keyFor(poller.getSelector());
 
             try {
                 int handshake = -1;
-
                 try {
-                    if (key != null) {
-                        if (socket.isHandshakeComplete()) {
-                            // No TLS handshaking required. Let the handler
-                            // process this socket / event combination.
-                            handshake = 0;
-                        } else if (event == SocketEvent.STOP || event == 
SocketEvent.DISCONNECT ||
-                                event == SocketEvent.ERROR) {
-                            // Unable to complete the TLS handshake. Treat it 
as
-                            // if the handshake failed.
-                            handshake = -1;
-                        } else {
-                            handshake = socket.handshake(key.isReadable(), 
key.isWritable());
-                            // The handshake process reads/writes from/to the
-                            // socket. status may therefore be OPEN_WRITE once
-                            // the handshake completes. However, the handshake
-                            // happens when the socket is opened so the status
-                            // must always be OPEN_READ after it completes. It
-                            // is OK to always set this as it is only used if
-                            // the handshake completes.
-                            event = SocketEvent.OPEN_READ;
-                        }
+                    if (socket.isHandshakeComplete()) {
+                        // No TLS handshaking required. Let the handler
+                        // process this socket / event combination.
+                        handshake = 0;
+                    } else if (event == SocketEvent.STOP || event == 
SocketEvent.DISCONNECT ||
+                            event == SocketEvent.ERROR) {
+                        // Unable to complete the TLS handshake. Treat it as
+                        // if the handshake failed.
+                        handshake = -1;
+                    } else {
+                        handshake = socket.handshake(event == 
SocketEvent.OPEN_READ, event == SocketEvent.OPEN_WRITE);
+                        // The handshake process reads/writes from/to the
+                        // socket. status may therefore be OPEN_WRITE once
+                        // the handshake completes. However, the handshake
+                        // happens when the socket is opened so the status
+                        // must always be OPEN_READ after it completes. It
+                        // is OK to always set this as it is only used if
+                        // the handshake completes.
+                        event = SocketEvent.OPEN_READ;
                     }
                 } catch (IOException x) {
                     handshake = -1;
@@ -1573,23 +1569,23 @@ public class NioEndpoint extends 
AbstractJsseEndpoint<NioChannel,SocketChannel>
                         state = getHandler().process(socketWrapper, event);
                     }
                     if (state == SocketState.CLOSED) {
-                        poller.cancelledKey(key, socketWrapper);
+                        
poller.cancelledKey(socket.getIOChannel().keyFor(poller.getSelector()), 
socketWrapper);
                     }
                 } else if (handshake == -1 ) {
                     getHandler().process(socketWrapper, 
SocketEvent.CONNECT_FAIL);
-                    poller.cancelledKey(key, socketWrapper);
+                    
poller.cancelledKey(socket.getIOChannel().keyFor(poller.getSelector()), 
socketWrapper);
                 } else if (handshake == SelectionKey.OP_READ){
                     socketWrapper.registerReadInterest();
                 } else if (handshake == SelectionKey.OP_WRITE){
                     socketWrapper.registerWriteInterest();
                 }
             } catch (CancelledKeyException cx) {
-                poller.cancelledKey(key, socketWrapper);
+                
poller.cancelledKey(socket.getIOChannel().keyFor(poller.getSelector()), 
socketWrapper);
             } catch (VirtualMachineError vme) {
                 ExceptionUtils.handleThrowable(vme);
             } catch (Throwable t) {
                 log.error(sm.getString("endpoint.processing.fail"), t);
-                poller.cancelledKey(key, socketWrapper);
+                
poller.cancelledKey(socket.getIOChannel().keyFor(poller.getSelector()), 
socketWrapper);
             } finally {
                 socketWrapper = null;
                 event = null;
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index 69ffa99..34d3cd6 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -67,6 +67,10 @@
         for <code>URIEncoding</code> is a superset of US-ASCII as required by
         RFC7230. (markt)
       </add>
+      <fix>
+        Avoid always retrieving the NIO poller selection key when processing
+        to reduce sync. (remm)
+      </fix>
     </changelog>
   </subsection>
 </section>


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to