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

Reply via email to