Author: markt
Date: Mon Sep 2 19:47:14 2013
New Revision: 1519508
URL: http://svn.apache.org/r1519508
Log:
Ensure that when multiple dispatches are requested (e.g. one for write and one
for read) if the first calls AsyncContext.complete() that the second dispatch
is not processed.
Modified:
tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java
tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java
tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java
tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java
tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java
tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java
tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java
tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapper.java
Modified: tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java?rev=1519508&r1=1519507&r2=1519508&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java Mon Sep
2 19:47:14 2013
@@ -525,14 +525,13 @@ public abstract class AbstractAjpProcess
}
} else if (actionCode == ActionCode.NB_WRITE_INTEREST) {
- // Assume it is always possible write data.
- // TODO Investigate 'true' non-blocking IO for AJP.
+ // Until 'true' non-blocking IO is implemented, assume it is always
+ // possible write data.
AtomicBoolean isReady = (AtomicBoolean)param;
isReady.set(true);
} else if (actionCode == ActionCode.NB_READ_INTEREST) {
- // TODO
- System.out.println("AJP Non-blocking IO TODO: NB_READ_INTEREST");
+ // NO-OP. Not required until 'true' non-blocking IO is implemented.
} else if (actionCode == ActionCode.REQUEST_BODY_FULLY_READ) {
AtomicBoolean result = (AtomicBoolean) param;
Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java?rev=1519508&r1=1519507&r2=1519508&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java Mon Sep 2
19:47:14 2013
@@ -84,6 +84,7 @@ public class AjpAprProcessor extends Abs
protected void actionInternal(ActionCode actionCode, Object param) {
if (actionCode == ActionCode.ASYNC_COMPLETE) {
+ socketWrapper.clearDispatches();
if (asyncStateMachine.asyncComplete()) {
((AprEndpoint)endpoint).processSocketAsync(this.socketWrapper,
SocketStatus.OPEN_READ);
Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java?rev=1519508&r1=1519507&r2=1519508&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/AjpNioProcessor.java Mon Sep 2
19:47:14 2013
@@ -69,9 +69,10 @@ public class AjpNioProcessor extends Abs
protected void actionInternal(ActionCode actionCode, Object param) {
if (actionCode == ActionCode.ASYNC_COMPLETE) {
+ socketWrapper.clearDispatches();
if (asyncStateMachine.asyncComplete()) {
((NioEndpoint)endpoint).dispatchForEvent(
- socketWrapper.getSocket(), SocketStatus.OPEN_READ,
false);
+ socketWrapper.getSocket(), SocketStatus.OPEN_READ,
true);
}
} else if (actionCode == ActionCode.ASYNC_SETTIMEOUT) {
if (param == null) return;
Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java?rev=1519508&r1=1519507&r2=1519508&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java Mon Sep 2
19:47:14 2013
@@ -81,6 +81,7 @@ public class AjpProcessor extends Abstra
protected void actionInternal(ActionCode actionCode, Object param) {
if (actionCode == ActionCode.ASYNC_COMPLETE) {
+ socketWrapper.clearDispatches();
if (asyncStateMachine.asyncComplete()) {
((JIoEndpoint)endpoint).processSocketAsync(this.socketWrapper,
SocketStatus.OPEN_READ);
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=1519508&r1=1519507&r2=1519508&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java
(original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java Mon Sep
2 19:47:14 2013
@@ -468,6 +468,7 @@ public class Http11AprProcessor extends
} else if (actionCode == ActionCode.COMET_SETTIMEOUT) {
//no op
} else if (actionCode == ActionCode.ASYNC_COMPLETE) {
+ socketWrapper.clearDispatches();
if (asyncStateMachine.asyncComplete()) {
((AprEndpoint)endpoint).processSocketAsync(this.socketWrapper,
SocketStatus.OPEN_READ);
Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java?rev=1519508&r1=1519507&r2=1519508&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java
(original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java Mon Sep
2 19:47:14 2013
@@ -496,6 +496,7 @@ public class Http11NioProcessor extends
attach.setTimeout(timeout);
}
} else if (actionCode == ActionCode.ASYNC_COMPLETE) {
+ socketWrapper.clearDispatches();
if (asyncStateMachine.asyncComplete()) {
((NioEndpoint)endpoint).dispatchForEvent(this.socketWrapper.getSocket(),SocketStatus.OPEN_READ,
true);
}
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=1519508&r1=1519507&r2=1519508&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java Mon Sep 2
19:47:14 2013
@@ -369,6 +369,7 @@ public class Http11Processor extends Abs
}
}
} else if (actionCode == ActionCode.ASYNC_COMPLETE) {
+ socketWrapper.clearDispatches();
if (asyncStateMachine.asyncComplete()) {
((JIoEndpoint) endpoint).processSocketAsync(this.socketWrapper,
SocketStatus.OPEN_READ);
Modified: tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapper.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapper.java?rev=1519508&r1=1519507&r2=1519508&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapper.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapper.java Mon Sep 2
19:47:14 2013
@@ -128,6 +128,9 @@ public class SocketWrapper<E> {
}
return result;
}
+ public void clearDispatches() {
+ dispatches.clear();
+ }
public void reset(E socket, long timeout) {
async = false;
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]