Author: jfclere Date: Sun May 2 10:02:56 2010 New Revision: 940189 URL: http://svn.apache.org/viewvc?rev=940189&view=rev Log: try to fix async for APR.
Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java 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=940189&r1=940188&r2=940189&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java (original) +++ tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java Sun May 2 10:02:56 2010 @@ -924,6 +924,44 @@ public class Http11AprProcessor implemen } + /* Copied from the AjpProcessor.java */ + public SocketState asyncDispatch(SocketStatus status) throws IOException { + + RequestInfo rp = request.getRequestProcessor(); + try { + rp.setStage(org.apache.coyote.Constants.STAGE_SERVICE); + error = !adapter.asyncDispatch(request, response, status); + } catch (InterruptedIOException e) { + error = true; + } catch (Throwable t) { + log.error(sm.getString("http11processor.request.process"), t); + // 500 - Internal Server Error + response.setStatus(500); + error = true; + } + + rp.setStage(org.apache.coyote.Constants.STAGE_ENDED); + + if (async) { + if (error) { + response.setStatus(500); + request.updateCounters(); + recycle(); + return SocketState.CLOSED; + } else { + return SocketState.LONG; + } + } else { + if (error) { + response.setStatus(500); + } + request.updateCounters(); + recycle(); + return SocketState.CLOSED; + } + + } + public void endRequest() { @@ -1223,12 +1261,16 @@ public class Http11AprProcessor implemen //TODO SERVLET3 - async async = true; } else if (actionCode == ActionCode.ACTION_ASYNC_COMPLETE) { - //TODO SERVLET3 - async + //TODO SERVLET3 - async - that is bit hacky - AtomicBoolean dispatch = (AtomicBoolean)param; RequestInfo rp = request.getRequestProcessor(); if ( rp.getStage() != org.apache.coyote.Constants.STAGE_SERVICE ) { //async handling dispatch.set(true); - // endpoint.processSocket(this.socket, SocketStatus.STOP); + try { + asyncDispatch(SocketStatus.STOP); // What to do with return code ? + } catch (IOException ex) { + error = true; + } } else { dispatch.set(false); } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org