Author: markt Date: Wed Mar 9 22:36:55 2011 New Revision: 1080040 URL: http://svn.apache.org/viewvc?rev=1080040&view=rev Log: Fix Async with APR and TCP_DEFER_ACCEPT
Modified: tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java tomcat/trunk/webapps/docs/changelog.xml Modified: tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java?rev=1080040&r1=1080039&r2=1080040&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java Wed Mar 9 22:36:55 2011 @@ -760,7 +760,8 @@ public class AprEndpoint extends Abstrac if (running) { SocketWrapper<Long> wrapper = new SocketWrapper<Long>(Long.valueOf(socket)); - getExecutor().execute(new SocketWithOptionsProcessor(wrapper)); + getExecutor().execute( + new SocketWithOptionsProcessor(wrapper, null)); } } catch (RejectedExecutionException x) { log.warn("Socket processing request was rejected for:"+socket,x); @@ -1641,9 +1642,13 @@ public class AprEndpoint extends Abstrac protected class SocketWithOptionsProcessor implements Runnable { protected SocketWrapper<Long> socket = null; + protected SocketStatus status = null; + - public SocketWithOptionsProcessor(SocketWrapper<Long> socket) { + public SocketWithOptionsProcessor(SocketWrapper<Long> socket, + SocketStatus status) { this.socket = socket; + this.status = status; } @Override @@ -1660,17 +1665,30 @@ public class AprEndpoint extends Abstrac } } else { // Process the request from this socket - if (!setSocketOptions(socket.getSocket().longValue()) - || handler.process(socket) == Handler.SocketState.CLOSED) { + if (!setSocketOptions(socket.getSocket().longValue())) { // Close socket and pool destroySocket(socket.getSocket().longValue()); socket = null; } + // Process the request from this socket + Handler.SocketState state = (status==null)?handler.process(socket):handler.asyncDispatch(socket, status); + if (state == Handler.SocketState.CLOSED) { + // Close socket and pool + destroySocket(socket.getSocket().longValue()); + socket = null; + } else if (state == Handler.SocketState.LONG) { + socket.access(); + if (socket.async) { + waitingRequests.add(socket); + } + } else if (state == Handler.SocketState.ASYNC_END) { + socket.access(); + SocketProcessor proc = new SocketProcessor(socket, SocketStatus.OPEN); + getExecutor().execute(proc); + } } } - } - } Modified: tomcat/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1080040&r1=1080039&r2=1080040&view=diff ============================================================================== --- tomcat/trunk/webapps/docs/changelog.xml (original) +++ tomcat/trunk/webapps/docs/changelog.xml Wed Mar 9 22:36:55 2011 @@ -90,6 +90,11 @@ <bug>48208</bug>: Allow the configuration of a custom trust manager for use in CLIENT-CERT authentication. (markt) </add> + <fix> + Fix issues that prevented asynchronous servlets from working when used + with the HTTP APR connector on platforms that support TCP_DEFER_ACCEPT. + (martk) + </fix> </changelog> </subsection> <subsection name="Jasper"> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org