Author: markt Date: Wed Jan 16 22:51:11 2013 New Revision: 1434463 URL: http://svn.apache.org/viewvc?rev=1434463&view=rev Log: APR/native refactoring - Add an endpoint implementation specific SocketWrapper - Track poller flags in new wrapper
Modified: tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java Modified: tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java?rev=1434463&r1=1434462&r2=1434463&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java Wed Jan 16 22:51:11 2013 @@ -99,8 +99,7 @@ public class AprEndpoint extends Abstrac protected ConcurrentLinkedQueue<SocketWrapper<Long>> waitingRequests = new ConcurrentLinkedQueue<>(); - private Map<Long,SocketWrapper<Long>> connections = - new ConcurrentHashMap<>(); + private Map<Long,AprSocketWrapper> connections = new ConcurrentHashMap<>(); // ------------------------------------------------------------ Constructor @@ -785,8 +784,8 @@ public class AprEndpoint extends Abstrac try { // During shutdown, executor may be null - avoid NPE if (running) { - SocketWrapper<Long> wrapper = - new SocketWrapper<>(Long.valueOf(socket)); + AprSocketWrapper wrapper = + new AprSocketWrapper(Long.valueOf(socket)); wrapper.setKeepAliveLeft(getMaxKeepAliveRequests()); connections.put(Long.valueOf(socket), wrapper); getExecutor().execute(new SocketWithOptionsProcessor(wrapper)); @@ -1548,8 +1547,7 @@ public class AprEndpoint extends Abstrac // Ignore } } - // Check timeouts for suspended connections if the poller is - // empty + // Check timeouts if the poller is empty while (connectionCount < 1 && addList.size() < 1) { // Reset maintain time. try { @@ -1579,16 +1577,17 @@ public class AprEndpoint extends Abstrac SocketInfo info = localAddList.get(); while (info != null) { if (info.read() || info.write()) { - boolean comet = connections.get( - Long.valueOf(info.socket)).isComet(); + AprSocketWrapper wrapper = connections.get( + Long.valueOf(info.socket)); + boolean comet = wrapper.isComet(); // Store timeout if (comet) { removeFromPoller(info.socket); } - int events = + wrapper.pollerFlags = wrapper.pollerFlags | (info.read() ? Poll.APR_POLLIN : 0) | (info.write() ? Poll.APR_POLLOUT : 0); - if (!addToPoller(info.socket, events)) { + if (!addToPoller(info.socket, wrapper.pollerFlags)) { // Can't do anything: close the socket right // away if (!comet || (comet && !processSocket( @@ -1628,8 +1627,11 @@ public class AprEndpoint extends Abstrac connectionCount -= rv; for (int n = 0; n < rv; n++) { timeouts.remove(desc[n*2+1]); + AprSocketWrapper wrapper = connections.get( + Long.valueOf(desc[n*2+1])); + wrapper.pollerFlags = wrapper.pollerFlags & ~((int) desc[n*2]); // Check for failed sockets and hand this socket off to a worker - if (connections.get(Long.valueOf(desc[n*2+1])).isComet()) { + if (wrapper.isComet()) { // Event processes either a read or a write depending on what the poller returns if (((desc[n*2] & Poll.APR_POLLHUP) == Poll.APR_POLLHUP) || ((desc[n*2] & Poll.APR_POLLERR) == Poll.APR_POLLERR) @@ -2168,6 +2170,17 @@ public class AprEndpoint extends Abstrac } + private static class AprSocketWrapper extends SocketWrapper<Long> { + + // This field should only be used by Poller#run() + private int pollerFlags = 0; + + public AprSocketWrapper(Long socket) { + super(socket); + } + } + + private static class PrivilegedSetTccl implements PrivilegedAction<Void> { private ClassLoader cl; --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org