You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2022/02/17 23:56:39 UTC

[tomcat] 02/02: Align with 9.0.x onwards - refactor PollerEvent.run

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

markt pushed a commit to branch 8.5.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git

commit 03b87cadd567e4af0d3f9e090e91ccc204c63ddd
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Thu Feb 17 23:56:24 2022 +0000

    Align with 9.0.x onwards - refactor PollerEvent.run
---
 java/org/apache/tomcat/util/net/NioEndpoint.java | 94 +++++++++++++-----------
 1 file changed, 52 insertions(+), 42 deletions(-)

diff --git a/java/org/apache/tomcat/util/net/NioEndpoint.java b/java/org/apache/tomcat/util/net/NioEndpoint.java
index 4c6f244..5aae3f0 100644
--- a/java/org/apache/tomcat/util/net/NioEndpoint.java
+++ b/java/org/apache/tomcat/util/net/NioEndpoint.java
@@ -638,11 +638,11 @@ public class NioEndpoint extends AbstractJsseEndpoint<NioChannel,SocketChannel>
     /**
      * PollerEvent, cacheable object for poller events to avoid GC
      */
-    public static class PollerEvent implements Runnable {
+    public static class PollerEvent {
 
         private NioChannel socket;
-        private int interestOps;
         private NioSocketWrapper socketWrapper;
+        private int interestOps;
 
         public PollerEvent(NioChannel ch, NioSocketWrapper w, int intOps) {
             reset(ch, w, intOps);
@@ -654,47 +654,20 @@ public class NioEndpoint extends AbstractJsseEndpoint<NioChannel,SocketChannel>
             socketWrapper = w;
         }
 
-        public void reset() {
-            reset(null, null, 0);
+        public NioSocketWrapper getSocketWrapper() {
+            return socketWrapper;
         }
 
-        @Override
-        public void run() {
-            if (interestOps == OP_REGISTER) {
-                try {
-                    socket.getIOChannel().register(
-                            socket.getPoller().getSelector(), SelectionKey.OP_READ, socketWrapper);
-                } catch (Exception x) {
-                    log.error(sm.getString("endpoint.nio.registerFail"), x);
-                }
-            } else {
-                final SelectionKey key = socket.getIOChannel().keyFor(socket.getPoller().getSelector());
-                try {
-                    if (key == null) {
-                        // The key was cancelled (e.g. due to socket closure)
-                        // and removed from the selector while it was being
-                        // processed. Count down the connections at this point
-                        // since it won't have been counted down when the socket
-                        // closed.
-                        socket.socketWrapper.getEndpoint().countDownConnection();
-                        ((NioSocketWrapper) socket.socketWrapper).closed = true;
-                    } else {
-                        final NioSocketWrapper socketWrapper = (NioSocketWrapper) key.attachment();
-                        if (socketWrapper != null) {
-                            //we are registering the key to start with, reset the fairness counter.
-                            int ops = key.interestOps() | interestOps;
-                            socketWrapper.interestOps(ops);
-                            key.interestOps(ops);
-                        } else {
-                            socket.getPoller().cancelledKey(key);
-                        }
-                    }
-                } catch (CancelledKeyException ckx) {
-                    try {
-                        socket.getPoller().cancelledKey(key);
-                    } catch (Exception ignore) {}
-                }
-            }
+        public NioChannel getSocket() {
+            return socket;
+        }
+
+        public int getInterestOps() {
+            return interestOps;
+        }
+
+        public void reset() {
+            reset(null, null, 0);
         }
 
         @Override
@@ -786,8 +759,45 @@ public class NioEndpoint extends AbstractJsseEndpoint<NioChannel,SocketChannel>
             PollerEvent pe = null;
             for (int i = 0, size = events.size(); i < size && (pe = events.poll()) != null; i++ ) {
                 result = true;
+                NioSocketWrapper socketWrapper = pe.getSocketWrapper();
+                NioChannel socket = pe.getSocket();
+                int interestOps = pe.getInterestOps();
                 try {
-                    pe.run();
+                    if (interestOps == OP_REGISTER) {
+                        try {
+                            socket.getIOChannel().register(
+                                    socket.getPoller().getSelector(), SelectionKey.OP_READ, socketWrapper);
+                        } catch (Exception x) {
+                            log.error(sm.getString("endpoint.nio.registerFail"), x);
+                        }
+                    } else {
+                        final SelectionKey key = socket.getIOChannel().keyFor(socket.getPoller().getSelector());
+                        try {
+                            if (key == null) {
+                                // The key was cancelled (e.g. due to socket closure)
+                                // and removed from the selector while it was being
+                                // processed. Count down the connections at this point
+                                // since it won't have been counted down when the socket
+                                // closed.
+                                socket.socketWrapper.getEndpoint().countDownConnection();
+                                ((NioSocketWrapper) socket.socketWrapper).closed = true;
+                            } else {
+                                final NioSocketWrapper attachment = (NioSocketWrapper) key.attachment();
+                                if (attachment != null) {
+                                    //we are registering the key to start with, reset the fairness counter.
+                                    int ops = key.interestOps() | interestOps;
+                                    attachment.interestOps(ops);
+                                    key.interestOps(ops);
+                                } else {
+                                    socket.getPoller().cancelledKey(key);
+                                }
+                            }
+                        } catch (CancelledKeyException ckx) {
+                            try {
+                                socket.getPoller().cancelledKey(key);
+                            } catch (Exception ignore) {}
+                        }
+                    }
                     if (running && eventCache != null) {
                         pe.reset();
                         eventCache.push(pe);

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