You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by fh...@apache.org on 2010/03/30 18:03:33 UTC

svn commit: r929181 - in /tomcat/trunk/java/org/apache: catalina/connector/CoyoteAdapter.java catalina/core/AsyncContextImpl.java coyote/http11/Http11Processor.java

Author: fhanik
Date: Tue Mar 30 16:03:32 2010
New Revision: 929181

URL: http://svn.apache.org/viewvc?rev=929181&view=rev
Log:
Clear up state handling a bit

Modified:
    tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java
    tomcat/trunk/java/org/apache/catalina/core/AsyncContextImpl.java
    tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java

Modified: tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java?rev=929181&r1=929180&r2=929181&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java (original)
+++ tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java Tue Mar 30 16:03:32 2010
@@ -280,7 +280,7 @@ public class CoyoteAdapter implements Ad
                 AsyncContextImpl asyncConImpl = (AsyncContextImpl)request.getAsyncContext();
                 //TODO SERVLET3 - async
                 //configure settings for timed out
-                asyncConImpl.setErrorState();
+                asyncConImpl.setErrorState(new IOException("Socket error."));
             }
             while (success) {
                 AsyncContextImpl impl = (AsyncContextImpl)request.getAsyncContext();
@@ -302,12 +302,15 @@ public class CoyoteAdapter implements Ad
                         //TODO SERVLET3 - async
                         async = false;
                         break;
+                } else if (impl.getState()==AsyncContextImpl.AsyncState.ERROR_DISPATCHING) {
+                    async = false;
+                    success = false;
+                    connector.getContainer().getPipeline().getFirst().invoke(request, response);
                 } else {
                     try {
                         connector.getContainer().getPipeline().getFirst().invoke(request, response);
-                    }catch (RuntimeException x) {
-                        success = false;
-                    } finally {
+                    } catch (RuntimeException x) {
+                        impl.setErrorState(x);
                     }
                 }
             }
@@ -394,7 +397,7 @@ public class CoyoteAdapter implements Ad
         }
 
         boolean comet = false;
-        boolean async = request.isAsyncStarted();
+        boolean async = false;
         
         try {
 
@@ -431,12 +434,12 @@ public class CoyoteAdapter implements Ad
             if (asyncConImpl!=null && asyncConImpl.getState()==AsyncContextImpl.AsyncState.STARTED) {
                 res.action(ActionCode.ACTION_ASYNC_START, request.getAsyncContext());
                 async = true;
-            } else if (asyncConImpl!=null && 
-                          (asyncConImpl.getState()==AsyncContextImpl.AsyncState.DISPATCHING ||
-                           asyncConImpl.getState()==AsyncContextImpl.AsyncState.COMPLETING  ||
-                           asyncConImpl.getState()==AsyncContextImpl.AsyncState.TIMING_OUT  ||
-                           asyncConImpl.getState()==AsyncContextImpl.AsyncState.ERROR_DISPATCHING)) {
+            } else if (request.isAsyncDispatching()) {
                 asyncDispatch(req, res, SocketStatus.OPEN);
+                if (request.isAsyncStarted()) {
+                    async = true;
+                    res.action(ActionCode.ACTION_ASYNC_START, request.getAsyncContext());
+                }
             } else if (!comet) {
                 response.finishResponse();
                 req.action(ActionCode.ACTION_POST_REQUEST , null);

Modified: tomcat/trunk/java/org/apache/catalina/core/AsyncContextImpl.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/AsyncContextImpl.java?rev=929181&r1=929180&r2=929181&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/AsyncContextImpl.java (original)
+++ tomcat/trunk/java/org/apache/catalina/core/AsyncContextImpl.java Tue Mar 30 16:03:32 2010
@@ -389,7 +389,8 @@ public class AsyncContextImpl implements
         state.set(AsyncState.TIMING_OUT);
     }
     
-    public void setErrorState() {
+    public void setErrorState(Throwable t) {
+        if (t!=null) request.setAttribute(RequestDispatcher.ERROR_EXCEPTION, t);
         state.set(AsyncState.ERROR_DISPATCHING);
     }
     

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=929181&r1=929180&r2=929181&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java Tue Mar 30 16:03:32 2010
@@ -318,21 +318,19 @@ public class Http11Processor extends Abs
         }
 
         rp.setStage(org.apache.coyote.Constants.STAGE_ENDED);
-        if (async) {
-            if (error) {
-                recycle();
-                return SocketState.CLOSED;
-            } else {
-                return SocketState.LONG;
-            }
+        if (error) {
+            recycle();
+            return SocketState.CLOSED;
+        } else if (async) {
+            return SocketState.LONG;
         } else {
-            if ( error || (!keepAlive)) {
+            if (!keepAlive) {
                 recycle();
                 return SocketState.CLOSED;
             } else {
                 return SocketState.OPEN;
             }
-        }
+        } 
     }
     
     
@@ -353,15 +351,13 @@ public class Http11Processor extends Abs
 
         rp.setStage(org.apache.coyote.Constants.STAGE_ENDED);
 
-        if (async) {
-            if (error) {
-                recycle();
-                return SocketState.CLOSED;
-            } else {
-                return SocketState.LONG;
-            }
+        if (error) {
+            recycle();
+            return SocketState.CLOSED;
+        } else if (async) {
+            return SocketState.LONG;
         } else {
-            if ( error || (!keepAlive)) {
+            if (!keepAlive) {
                 recycle();
                 return SocketState.CLOSED;
             } else {



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org