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: [email protected]
For additional commands, e-mail: [email protected]