Author: remm
Date: Wed May 7 16:00:44 2014
New Revision: 1593047
URL: http://svn.apache.org/r1593047
Log:
- Fix possible (very rare) corruption doing keepalive after a Comet request.
- Stop ignoring read pending exceptions.
Modified:
tomcat/trunk/java/org/apache/coyote/http11/Http11Nio2Processor.java
tomcat/trunk/java/org/apache/coyote/http11/InternalNio2InputBuffer.java
tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java
tomcat/trunk/webapps/docs/changelog.xml
Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11Nio2Processor.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11Nio2Processor.java?rev=1593047&r1=1593046&r2=1593047&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11Nio2Processor.java
(original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11Nio2Processor.java Wed May
7 16:00:44 2014
@@ -132,7 +132,9 @@ public class Http11Nio2Processor extends
if (keepAlive) {
inputBuffer.nextRequest();
outputBuffer.nextRequest();
- return SocketState.OPEN;
+ // Following Comet processing, a read is still pending, so
+ // keep the processor associated
+ return SocketState.LONG;
} else {
return SocketState.CLOSED;
}
Modified:
tomcat/trunk/java/org/apache/coyote/http11/InternalNio2InputBuffer.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/InternalNio2InputBuffer.java?rev=1593047&r1=1593046&r2=1593047&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/InternalNio2InputBuffer.java
(original)
+++ tomcat/trunk/java/org/apache/coyote/http11/InternalNio2InputBuffer.java Wed
May 7 16:00:44 2014
@@ -21,7 +21,6 @@ import java.io.IOException;
import java.net.SocketTimeoutException;
import java.nio.ByteBuffer;
import java.nio.channels.CompletionHandler;
-import java.nio.channels.ReadPendingException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
@@ -265,12 +264,8 @@ public class InternalNio2InputBuffer ext
flipped = false;
readPending = true;
Nio2Endpoint.startInline();
- try {
- socket.getSocket().read(byteBuffer,
socket.getTimeout(),
+ socket.getSocket().read(byteBuffer,
socket.getTimeout(),
TimeUnit.MILLISECONDS, socket,
completionHandler);
- } catch (ReadPendingException e) {
- // Ignore ?
- }
Nio2Endpoint.endInline();
// Return the number of bytes that have been placed
into the buffer
if (!readPending) {
Modified: tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java?rev=1593047&r1=1593046&r2=1593047&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java Wed May 7
16:00:44 2014
@@ -29,7 +29,6 @@ import java.nio.channels.AsynchronousSoc
import java.nio.channels.ClosedChannelException;
import java.nio.channels.CompletionHandler;
import java.nio.channels.FileChannel;
-import java.nio.channels.ReadPendingException;
import java.nio.file.StandardOpenOption;
import java.util.Iterator;
import java.util.concurrent.ConcurrentHashMap;
@@ -922,12 +921,8 @@ public class Nio2Endpoint extends Abstra
}
ByteBuffer byteBuffer =
socket.getSocket().getBufHandler().getReadBuffer();
byteBuffer.clear();
- try {
- socket.getSocket().read(byteBuffer, socket.getTimeout(),
- TimeUnit.MILLISECONDS, socket, awaitBytes);
- } catch (ReadPendingException e) {
- // Ignore
- }
+ socket.getSocket().read(byteBuffer, socket.getTimeout(),
+ TimeUnit.MILLISECONDS, socket, awaitBytes);
}
public boolean processSendfile(final Nio2SocketWrapper socket) {
Modified: tomcat/trunk/webapps/docs/changelog.xml
URL:
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1593047&r1=1593046&r2=1593047&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Wed May 7 16:00:44 2014
@@ -182,6 +182,9 @@
<bug>56416</bug>: Correct documentation for default value of socket
linger for the AJP and HTTP connectors. (markt)
</fix>
+ <fix>
+ Fix possible corruption if doing keepalive after a comet request.
(remm)
+ </fix>
</changelog>
</subsection>
<subsection name="Jasper">
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]