Author: remm
Date: Fri Apr 4 20:48:55 2014
New Revision: 1584904
URL: http://svn.apache.org/r1584904
Log:
Fix trigger of the read event (so registerForEvent is actually useful).
Modified:
tomcat/trunk/java/org/apache/coyote/http11/Http11Nio2Processor.java
tomcat/trunk/java/org/apache/coyote/http11/InternalNio2InputBuffer.java
tomcat/trunk/java/org/apache/coyote/http11/InternalNio2OutputBuffer.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=1584904&r1=1584903&r2=1584904&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11Nio2Processor.java
(original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11Nio2Processor.java Fri Apr
4 20:48:55 2014
@@ -144,8 +144,12 @@ public class Http11Nio2Processor extends
@Override
protected void registerForEvent(boolean read, boolean write) {
- // Nothing to do here, the appropriate operations should
- // already be pending
+ if (read) {
+ ((InternalNio2InputBuffer) inputBuffer).registerReadInterest();
+ }
+ if (write) {
+ ((InternalNio2OutputBuffer) outputBuffer).registerWriteInterest();
+ }
}
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=1584904&r1=1584903&r2=1584904&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/InternalNio2InputBuffer.java
(original)
+++ tomcat/trunk/java/org/apache/coyote/http11/InternalNio2InputBuffer.java Fri
Apr 4 20:48:55 2014
@@ -153,6 +153,11 @@ public class InternalNio2InputBuffer ext
private int socketReadBufferSize;
/**
+ * Track write interest
+ */
+ protected volatile boolean interest = false;
+
+ /**
* The completion handler used for asynchronous read operations
*/
private CompletionHandler<Integer, SocketWrapper<Nio2Channel>>
completionHandler;
@@ -202,6 +207,7 @@ public class InternalNio2InputBuffer ext
headerData.recycle();
readPending = false;
flipped = false;
+ interest = false;
e = null;
}
@@ -222,6 +228,7 @@ public class InternalNio2InputBuffer ext
parsingRequestLineStart = 0;
parsingRequestLineQPos = -1;
headerData.recycle();
+ interest = false;
}
/**
@@ -757,7 +764,8 @@ public class InternalNio2InputBuffer ext
failed(new
EOFException(sm.getString("iib.eof.error")), attachment);
} else {
readPending = false;
- if (!Nio2Endpoint.isInline()) {
+ if ((request.getReadListener() == null || interest) &&
!Nio2Endpoint.isInline()) {
+ interest = false;
notify = true;
}
}
@@ -892,6 +900,18 @@ public class InternalNio2InputBuffer ext
}
+ public void registerReadInterest() {
+ synchronized (completionHandler) {
+ if (readPending) {
+ interest = true;
+ } else {
+ // If no write is pending, notify
+ endpoint.processSocket(socket, SocketStatus.OPEN_READ, true);
+ }
+ }
+ }
+
+
// ------------------------------------- InputStreamInputBuffer Inner Class
Modified:
tomcat/trunk/java/org/apache/coyote/http11/InternalNio2OutputBuffer.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/InternalNio2OutputBuffer.java?rev=1584904&r1=1584903&r2=1584904&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/InternalNio2OutputBuffer.java
(original)
+++ tomcat/trunk/java/org/apache/coyote/http11/InternalNio2OutputBuffer.java
Fri Apr 4 20:48:55 2014
@@ -474,7 +474,7 @@ public class InternalNio2OutputBuffer ex
@Override
- protected void registerWriteInterest() throws IOException {
+ public void registerWriteInterest() {
synchronized (completionHandler) {
if (writePending.availablePermits() == 0) {
interest = true;
Modified: tomcat/trunk/webapps/docs/changelog.xml
URL:
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1584904&r1=1584903&r2=1584904&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Fri Apr 4 20:48:55 2014
@@ -86,6 +86,9 @@
<fix>
Code cleanups and i18n in NIO2. (remm)
</fix>
+ <fix>
+ Fix extra onDataAvailable calls. (remm)
+ </fix>
</changelog>
</subsection>
<subsection name="Cluster">
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]