Author: markt
Date: Mon Mar 28 19:15:06 2011
New Revision: 1086349
URL: http://svn.apache.org/viewvc?rev=1086349&view=rev
Log:
Move the processor.recycle calls to just before the point where the processor
is returned to the pool. This ensures returned processors are recycled (this
could have been skipped on some exception paths)
Possible contributing factor to
https://issues.apache.org/bugzilla/show_bug.cgi?id=50957 ?
Modified:
tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java
tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProtocol.java
tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java
tomcat/trunk/java/org/apache/coyote/ajp/AjpProtocol.java
tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java
tomcat/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java
tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java
tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java
tomcat/trunk/java/org/apache/coyote/http11/Http11Protocol.java
Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java?rev=1086349&r1=1086348&r2=1086349&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java Mon Mar 28
19:15:06 2011
@@ -316,7 +316,6 @@ public class AjpAprProcessor extends Abs
rp.setStage(org.apache.coyote.Constants.STAGE_KEEPALIVE);
recycle();
-
}
// Add the socket to the poller
@@ -329,12 +328,10 @@ public class AjpAprProcessor extends Abs
rp.setStage(org.apache.coyote.Constants.STAGE_ENDED);
if (error || endpoint.isPaused()) {
- recycle();
return SocketState.CLOSED;
} else if (isAsync()) {
return SocketState.LONG;
} else {
- recycle();
return SocketState.OPEN;
}
}
@@ -369,14 +366,12 @@ public class AjpAprProcessor extends Abs
if (isAsync()) {
if (error) {
request.updateCounters();
- recycle();
return SocketState.CLOSED;
} else {
return SocketState.LONG;
}
} else {
request.updateCounters();
- recycle();
if (error) {
return SocketState.CLOSED;
} else {
Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProtocol.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProtocol.java?rev=1086349&r1=1086348&r2=1086349&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProtocol.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProtocol.java Mon Mar 28
19:15:06 2011
@@ -197,6 +197,7 @@ public class AjpAprProtocol extends Abst
connections.put(socket, processor);
socket.setAsync(true);
} else {
+ processor.recycle();
recycledProcessors.offer(processor);
}
return state;
@@ -220,6 +221,7 @@ public class AjpAprProtocol extends Abst
// less-than-verbose logs.
log.error(sm.getString("ajpprotocol.proto.error"), e);
}
+ processor.recycle();
recycledProcessors.offer(processor);
return SocketState.CLOSED;
}
@@ -251,6 +253,7 @@ public class AjpAprProtocol extends Abst
}
if (state != SocketState.LONG && state !=
SocketState.ASYNC_END) {
connections.remove(socket);
+ processor.recycle();
recycledProcessors.offer(processor);
if (state == SocketState.OPEN) {
((AprEndpoint)proto.endpoint).getPoller().add(socket.getSocket().longValue());
Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java?rev=1086349&r1=1086348&r2=1086349&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java Mon Mar 28
19:15:06 2011
@@ -334,7 +334,6 @@ public class AjpProcessor extends Abstra
rp.setStage(org.apache.coyote.Constants.STAGE_KEEPALIVE);
recycle();
-
}
rp.setStage(org.apache.coyote.Constants.STAGE_ENDED);
@@ -342,7 +341,6 @@ public class AjpProcessor extends Abstra
if (isAsync() && !error && !endpoint.isPaused()) {
return SocketState.LONG;
} else {
- recycle();
input = null;
output = null;
return SocketState.CLOSED;
@@ -373,7 +371,6 @@ public class AjpProcessor extends Abstra
if (error) {
response.setStatus(500);
request.updateCounters();
- recycle();
input = null;
output = null;
return SocketState.CLOSED;
@@ -385,7 +382,6 @@ public class AjpProcessor extends Abstra
response.setStatus(500);
}
request.updateCounters();
- recycle();
input = null;
output = null;
return SocketState.CLOSED;
Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpProtocol.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpProtocol.java?rev=1086349&r1=1086348&r2=1086349&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/ajp/AjpProtocol.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/AjpProtocol.java Mon Mar 28
19:15:06 2011
@@ -189,6 +189,7 @@ public class AjpProtocol extends Abstrac
return processor.asyncPostProcess();
} else {
socket.setAsync(false);
+ processor.recycle();
recycledProcessors.offer(processor);
}
return state;
@@ -211,6 +212,7 @@ public class AjpProtocol extends Abstrac
// less-than-verbose logs.
log.error(sm.getString("ajpprotocol.proto.error"), e);
}
+ processor.recycle();
recycledProcessors.offer(processor);
return SocketState.CLOSED;
}
Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java?rev=1086349&r1=1086348&r2=1086349&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java
(original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java Mon Mar
28 19:15:06 2011
@@ -187,12 +187,10 @@ public class Http11AprProcessor extends
if (error) {
inputBuffer.nextRequest();
outputBuffer.nextRequest();
- recycle();
return SocketState.CLOSED;
} else if (!comet) {
inputBuffer.nextRequest();
outputBuffer.nextRequest();
- recycle();
return SocketState.OPEN;
} else {
return SocketState.LONG;
@@ -367,12 +365,10 @@ public class Http11AprProcessor extends
rp.setStage(org.apache.coyote.Constants.STAGE_ENDED);
if (error || endpoint.isPaused()) {
- recycle();
return SocketState.CLOSED;
} else if (comet || isAsync()) {
return SocketState.LONG;
} else {
- recycle();
return (openSocket) ? SocketState.OPEN : SocketState.CLOSED;
}
@@ -406,12 +402,10 @@ public class Http11AprProcessor extends
rp.setStage(org.apache.coyote.Constants.STAGE_ENDED);
if (error) {
- recycle();
return SocketState.CLOSED;
} else if (isAsync()) {
return SocketState.LONG;
} else {
- recycle();
if (!keepAlive) {
return SocketState.CLOSED;
} else {
Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java?rev=1086349&r1=1086348&r2=1086349&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java Mon Mar
28 19:15:06 2011
@@ -296,6 +296,7 @@ public class Http11AprProtocol extends A
if (state != SocketState.LONG) {
connections.remove(socket.getSocket());
socket.setAsync(false);
+ processor.recycle();
recycledProcessors.offer(processor);
if (state == SocketState.OPEN) {
((AprEndpoint)proto.endpoint).getPoller().add(socket.getSocket().longValue());
@@ -337,6 +338,7 @@ public class Http11AprProtocol extends A
socket.getSocket().longValue());
}
} else {
+ processor.recycle();
recycledProcessors.offer(processor);
}
return state;
@@ -361,6 +363,7 @@ public class Http11AprProtocol extends A
Http11AprProtocol.log.error(
sm.getString("http11protocol.proto.error"), e);
}
+ processor.recycle();
recycledProcessors.offer(processor);
return SocketState.CLOSED;
}
@@ -391,6 +394,7 @@ public class Http11AprProtocol extends A
if (state != SocketState.LONG && state !=
SocketState.ASYNC_END) {
connections.remove(socket.getSocket());
socket.setAsync(false);
+ processor.recycle();
recycledProcessors.offer(processor);
if (state == SocketState.OPEN) {
((AprEndpoint)proto.endpoint).getPoller().add(socket.getSocket().longValue());
Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java?rev=1086349&r1=1086348&r2=1086349&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java
(original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java Mon Mar
28 19:15:06 2011
@@ -206,10 +206,8 @@ public class Http11NioProcessor extends
rp.setStage(org.apache.coyote.Constants.STAGE_ENDED);
if (error) {
- recycle();
return SocketState.CLOSED;
} else if (!comet) {
- recycle();
return (keepAlive)?SocketState.OPEN:SocketState.CLOSED;
} else {
return SocketState.LONG;
@@ -267,10 +265,8 @@ public class Http11NioProcessor extends
rp.setStage(org.apache.coyote.Constants.STAGE_ENDED);
if (error) {
- recycle();
return SocketState.CLOSED;
} else if (!comet && !isAsync()) {
- recycle();
return (keepAlive)?SocketState.OPEN:SocketState.CLOSED;
} else {
return SocketState.LONG;
@@ -305,7 +301,7 @@ public class Http11NioProcessor extends
boolean keptAlive = false;
boolean openSocket = false;
- boolean recycle = true;
+ boolean readComplete = true;
final KeyAttachment ka = (KeyAttachment)socket.getAttachment(false);
while (!error && keepAlive && !comet && !isAsync() &&
!endpoint.isPaused()) {
@@ -328,7 +324,7 @@ public class Http11NioProcessor extends
} else {
// Started to read request line. Need to keep processor
// associated with socket
- recycle = false;
+ readComplete = false;
}
if (endpoint.isPaused()) {
// 503 - Service unavailable
@@ -345,7 +341,7 @@ public class Http11NioProcessor extends
//we've read part of the request, don't recycle it
//instead associate it with the socket
openSocket = true;
- recycle = false;
+ readComplete = false;
break;
}
request.setStartTime(System.currentTimeMillis());
@@ -471,16 +467,11 @@ public class Http11NioProcessor extends
rp.setStage(org.apache.coyote.Constants.STAGE_ENDED);
if (error || endpoint.isPaused()) {
- recycle();
return SocketState.CLOSED;
} else if (comet || isAsync()) {
return SocketState.LONG;
} else {
- if (recycle) {
- recycle();
- }
- //return (openSocket) ? (SocketState.OPEN) : SocketState.CLOSED;
- return (openSocket) ? (recycle?SocketState.OPEN:SocketState.LONG)
: SocketState.CLOSED;
+ return (openSocket) ?
(readComplete?SocketState.OPEN:SocketState.LONG) : SocketState.CLOSED;
}
}
Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java?rev=1086349&r1=1086348&r2=1086349&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java Mon Mar 28
19:15:06 2011
@@ -356,12 +356,10 @@ public class Http11Processor extends Abs
rp.setStage(org.apache.coyote.Constants.STAGE_ENDED);
if (error) {
- recycle();
return SocketState.CLOSED;
} else if (isAsync()) {
return SocketState.LONG;
} else {
- recycle();
if (!keepAlive) {
return SocketState.CLOSED;
} else {
Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11Protocol.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11Protocol.java?rev=1086349&r1=1086348&r2=1086349&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11Protocol.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11Protocol.java Mon Mar 28
19:15:06 2011
@@ -194,6 +194,7 @@ public class Http11Protocol extends Abst
return processor.asyncPostProcess();
} else {
socket.setAsync(false);
+ processor.recycle();
recycledProcessors.offer(processor);
}
return state;
@@ -216,6 +217,7 @@ public class Http11Protocol extends Abst
// less-than-verbose logs.
log.error(sm.getString("http11protocol.proto.error"), e);
}
+ processor.recycle();
recycledProcessors.offer(processor);
return SocketState.CLOSED;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]