Author: markt
Date: Thu Sep 30 17:35:35 2010
New Revision: 1003177
URL: http://svn.apache.org/viewvc?rev=1003177&view=rev
Log:
Fix the root cause of the previous TCK failures (badly re-factored flush()) and
restore the changes that were just working around the symptoms (poller stuff).
Servlet 3.0 passes for the AJP/APR connector as of this commit.
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/AjpAprProtocol.java
tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.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=1003177&r1=1003176&r2=1003177&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java Thu Sep
30 17:35:35 2010
@@ -233,7 +233,7 @@ public abstract class AbstractAjpProcess
}
try {
- flush();
+ flush(false);
} catch (IOException e) {
// Set error flag
error = true;
@@ -253,7 +253,7 @@ public abstract class AbstractAjpProcess
}
try {
- flush();
+ flush(true);
} catch (IOException e) {
// Set error flag
error = true;
@@ -358,7 +358,7 @@ public abstract class AbstractAjpProcess
// Methods called by action()
protected abstract void actionInternal(ActionCode actionCode, Object param);
- protected abstract void flush() throws IOException;
+ protected abstract void flush(boolean tbd) throws IOException;
protected abstract void finish() throws IOException;
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=1003177&r1=1003176&r2=1003177&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProcessor.java Thu Sep 30
17:35:35 2010
@@ -319,6 +319,13 @@ public class AjpAprProcessor extends Abs
}
+ // Add the socket to the poller
+ if (!error && !endpoint.isPaused()) {
+ if (!isAsync()) {
+ ((AprEndpoint)endpoint).getPoller().add(socketRef);
+ }
+ }
+
rp.setStage(org.apache.coyote.Constants.STAGE_ENDED);
if (error || endpoint.isPaused()) {
@@ -451,10 +458,10 @@ public class AjpAprProcessor extends Abs
// Add the end message
if (outputBuffer.position() + endMessageArray.length >
outputBuffer.capacity()) {
- flush();
+ flush(false);
}
outputBuffer.put(endMessageArray);
- flush();
+ flush(false);
}
@@ -645,7 +652,7 @@ public class AjpAprProcessor extends Abs
* Callback to write data from the buffer.
*/
@Override
- protected void flush() throws IOException {
+ protected void flush(boolean explicit) throws IOException {
long socketRef = socket.getSocket().longValue();
@@ -656,11 +663,12 @@ public class AjpAprProcessor extends Abs
outputBuffer.clear();
}
// Send explicit flush message
- if (Socket.sendb(socketRef, flushMessageBuffer, 0,
- flushMessageBuffer.position()) < 0) {
- throw new IOException(sm.getString("ajpprocessor.failedflush"));
+ if (explicit) {
+ if (Socket.sendb(socketRef, flushMessageBuffer, 0,
+ flushMessageBuffer.position()) < 0) {
+ throw new
IOException(sm.getString("ajpprocessor.failedflush"));
+ }
}
-
}
@@ -705,7 +713,7 @@ public class AjpAprProcessor extends Abs
len -= thisTime;
if (outputBuffer.position() + thisTime +
Constants.H_SIZE + 4 > outputBuffer.capacity()) {
- flush();
+ flush(false);
}
outputBuffer.put((byte) 0x41);
outputBuffer.put((byte) 0x42);
Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProtocol.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProtocol.java?rev=1003177&r1=1003176&r2=1003177&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProtocol.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/AjpAprProtocol.java Thu Sep 30
17:35:35 2010
@@ -481,9 +481,9 @@ public class AjpAprProtocol
if (state != SocketState.LONG && state !=
SocketState.ASYNC_END) {
connections.remove(socket);
recycledProcessors.offer(result);
- //if (state == SocketState.OPEN) {
- //
proto.endpoint.getPoller().add(socket.getSocket().longValue());
- //}
+ if (state == SocketState.OPEN) {
+
proto.endpoint.getPoller().add(socket.getSocket().longValue());
+ }
}
}
}
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=1003177&r1=1003176&r2=1003177&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java Thu Sep 30
17:35:35 2010
@@ -577,7 +577,7 @@ public class AjpProcessor extends Abstra
* Callback to write data from the buffer.
*/
@Override
- protected void flush() throws IOException {
+ protected void flush(boolean explicit) throws IOException {
// Send the flush message
output.write(flushMessageArray);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]