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: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org