Author: markt
Date: Wed Jun 13 16:00:57 2012
New Revision: 1349933
URL: http://svn.apache.org/viewvc?rev=1349933&view=rev
Log:
Simplify the APR poller now per socket timeouts are supported
Modified:
tomcat/tc7.0.x/trunk/ (props changed)
tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java
Propchange: tomcat/tc7.0.x/trunk/
------------------------------------------------------------------------------
Merged /tomcat/trunk:r1342029
Modified: tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java
URL:
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java?rev=1349933&r1=1349932&r2=1349933&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java
(original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java Wed
Jun 13 16:00:57 2012
@@ -1094,17 +1094,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; }
@@ -1120,35 +1118,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;
}
@@ -1165,11 +1148,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;
@@ -1218,7 +1198,11 @@ public class AprEndpoint extends Abstrac
return;
}
addSocket[addCount] = socket;
- addSocketKeepAlive[addCount] = keepAlive;
+ if (keepAlive) {
+ addSocketTimeout[addCount] = getKeepAliveTimeout();
+ } else {
+ addSocketTimeout[addCount] = getSoTimeout();
+ }
addCount++;
this.notify();
}
@@ -1270,14 +1254,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 {
@@ -1301,9 +1281,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) {
@@ -1311,9 +1288,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]