Author: remy.maucherat(a)jboss.com
Date: 2009-12-15 11:46:42 -0500 (Tue, 15 Dec 2009)
New Revision: 1343
Modified:
trunk/java/org/apache/catalina/connector/CoyoteAdapter.java
trunk/java/org/apache/coyote/http11/Http11AprProcessor.java
Log:
- Add something I thought about initially but then forgot about: add a flag to not switch
to non blocking when using APR with Servlet 3.0 async.
Modified: trunk/java/org/apache/catalina/connector/CoyoteAdapter.java
===================================================================
--- trunk/java/org/apache/catalina/connector/CoyoteAdapter.java 2009-12-15 15:33:55 UTC
(rev 1342)
+++ trunk/java/org/apache/catalina/connector/CoyoteAdapter.java 2009-12-15 16:46:42 UTC
(rev 1343)
@@ -367,7 +367,8 @@
if (request.isEventMode()) {
if (!response.isClosed() && !response.isError()) {
- res.action(ActionCode.ACTION_EVENT_BEGIN, null);
+ res.action(ActionCode.ACTION_EVENT_BEGIN,
+ (request.getAsyncContext() == null) ? Boolean.TRUE :
Boolean.FALSE);
event = true;
}
} else if (request.getAsyncContext() != null) {
Modified: trunk/java/org/apache/coyote/http11/Http11AprProcessor.java
===================================================================
--- trunk/java/org/apache/coyote/http11/Http11AprProcessor.java 2009-12-15 15:33:55 UTC
(rev 1342)
+++ trunk/java/org/apache/coyote/http11/Http11AprProcessor.java 2009-12-15 16:46:42 UTC
(rev 1343)
@@ -1246,16 +1246,20 @@
} else if (actionCode == ActionCode.ACTION_EVENT_BEGIN) {
event = true;
// Set socket to non blocking mode
- Socket.timeoutSet(socket, 0);
- outputBuffer.setNonBlocking(true);
- inputBuffer.setNonBlocking(true);
+ if (param == Boolean.TRUE) {
+ Socket.timeoutSet(socket, 0);
+ outputBuffer.setNonBlocking(true);
+ inputBuffer.setNonBlocking(true);
+ }
} else if (actionCode == ActionCode.ACTION_EVENT_END) {
event = false;
// End non blocking mode
- outputBuffer.setNonBlocking(false);
- inputBuffer.setNonBlocking(false);
- if (!error) {
- Socket.timeoutSet(socket, endpoint.getSoTimeout() * 1000);
+ if (outputBuffer.getNonBlocking()) {
+ outputBuffer.setNonBlocking(false);
+ inputBuffer.setNonBlocking(false);
+ if (!error) {
+ Socket.timeoutSet(socket, endpoint.getSoTimeout() * 1000);
+ }
}
} else if (actionCode == ActionCode.ACTION_EVENT_SUSPEND) {
readNotifications = false;
Show replies by date