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: [email protected]
For additional commands, e-mail: [email protected]