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: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org