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