Author: markt Date: Wed May 23 20:27:40 2012 New Revision: 1342029 URL: http://svn.apache.org/viewvc?rev=1342029&view=rev Log: Simplify the poller by using the new per socket timeout to differentiate between connection and keepalive timeouts without using two pollers.
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=1342029&r1=1342028&r2=1342029&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java Wed May 23 20:27:40 2012 @@ -1098,17 +1098,15 @@ public class AprEndpoint extends Abstrac // Need two pollsets since the socketTimeout and the keep-alive timeout // can have different values. private long connectionPollset = 0; - private long keepAlivePollset = 0; private long pool = 0; private long[] desc; private long[] addSocket; - private boolean[] addSocketKeepAlive; + private int[] addSocketTimeout; private volatile int addCount = 0; private boolean comet = true; - private boolean separateKeepAlive = false; protected volatile int keepAliveCount = 0; public int getKeepAliveCount() { return keepAliveCount; } @@ -1124,35 +1122,20 @@ public class AprEndpoint extends Abstrac protected void init() { pool = Pool.create(serverSockPool); int size = getMaxConnections() / pollerThreadCount; - int keepAliveTimeout = getKeepAliveTimeout(); int socketTimeout = socketProperties.getSoTimeout(); - if (keepAliveTimeout != socketTimeout && !comet) { - separateKeepAlive = true; - } connectionPollset = allocatePoller(size, pool, socketTimeout); - if (separateKeepAlive) { - keepAlivePollset = allocatePoller(size, pool, keepAliveTimeout); - } if (connectionPollset == 0 && size > 1024) { size = 1024; connectionPollset = allocatePoller(size, pool, socketTimeout); - if (separateKeepAlive) { - keepAlivePollset = - allocatePoller(size, pool, keepAliveTimeout); - } } if (connectionPollset == 0) { size = 62; connectionPollset = allocatePoller(size, pool, socketTimeout); - if (separateKeepAlive) { - keepAlivePollset = - allocatePoller(size, pool, keepAliveTimeout); - } } desc = new long[size * 2]; keepAliveCount = 0; addSocket = new long[size]; - addSocketKeepAlive = new boolean[size]; + addSocketTimeout= new int[size]; addCount = 0; } @@ -1169,11 +1152,8 @@ public class AprEndpoint extends Abstrac destroySocket(addSocket[i]); } } - // Close all sockets still in the pollers + // Close all sockets still in the poller closePollset(connectionPollset); - if (separateKeepAlive) { - closePollset(keepAlivePollset); - } Pool.destroy(pool); keepAliveCount = 0; addCount = 0; @@ -1222,7 +1202,11 @@ public class AprEndpoint extends Abstrac return; } addSocket[addCount] = socket; - addSocketKeepAlive[addCount] = keepAlive; + if (keepAlive) { + addSocketTimeout[addCount] = getKeepAliveTimeout(); + } else { + addSocketTimeout[addCount] = getSoTimeout(); + } addCount++; // TODO: interrupt poll ? this.notify(); @@ -1275,14 +1259,10 @@ public class AprEndpoint extends Abstrac int successCount = 0; try { for (int i = (addCount - 1); i >= 0; i--) { - int rv; - if (separateKeepAlive && addSocketKeepAlive[i]) { - rv = Poll.add(keepAlivePollset, - addSocket[i], Poll.APR_POLLIN); - } else { - rv = Poll.add(connectionPollset, - addSocket[i], Poll.APR_POLLIN); - } + int rv = Poll.addWithTimeout( + connectionPollset, addSocket[i], + Poll.APR_POLLIN, + addSocketTimeout[i] * 1000); if (rv == Status.APR_SUCCESS) { successCount++; } else { @@ -1306,9 +1286,6 @@ public class AprEndpoint extends Abstrac if (doPoll(connectionPollset)) { continue; } - if (separateKeepAlive && doPoll(keepAlivePollset)) { - continue; - } // Check timeouts (much less frequently that polling) if (maintainTime > 1000000L && running) { @@ -1316,9 +1293,6 @@ public class AprEndpoint extends Abstrac if (socketProperties.getSoTimeout() > 0) { doTimeout(connectionPollset); } - if (separateKeepAlive) { - doTimeout(keepAlivePollset); - } } } catch (Throwable t) { ExceptionUtils.handleThrowable(t); --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org