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