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