You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by re...@apache.org on 2014/03/21 20:50:51 UTC

svn commit: r1580032 - in /tomcat/trunk: java/org/apache/coyote/http11/InternalNio2OutputBuffer.java webapps/docs/changelog.xml

Author: remm
Date: Fri Mar 21 19:50:51 2014
New Revision: 1580032

URL: http://svn.apache.org/r1580032
Log:
Improve trigger of the onWritePossible notification.

Modified:
    tomcat/trunk/java/org/apache/coyote/http11/InternalNio2OutputBuffer.java
    tomcat/trunk/webapps/docs/changelog.xml

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=1580032&r1=1580031&r2=1580032&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/InternalNio2OutputBuffer.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/InternalNio2OutputBuffer.java Fri Mar 21 19:50:51 2014
@@ -454,15 +454,24 @@ public class InternalNio2OutputBuffer ex
 
     @Override
     protected boolean hasMoreDataToFlush() {
-        return (flipped && socket.getSocket().getBufHandler().getWriteBuffer().remaining() > 0) ||
-                (!flipped && socket.getSocket().getBufHandler().getWriteBuffer().position() > 0) ||
-                (writePending.availablePermits() == 0) || bufferedWrites.size() > 0 || e != null;
+        synchronized (completionHandler) {
+            return (flipped && socket.getSocket().getBufHandler().getWriteBuffer().remaining() > 0) ||
+                    (!flipped && socket.getSocket().getBufHandler().getWriteBuffer().position() > 0) ||
+                    bufferedWrites.size() > 0 || e != null;
+        }
     }
 
 
     @Override
     protected void registerWriteInterest() throws IOException {
-        interest = true;
+        synchronized (completionHandler) {
+            if (writePending.availablePermits() == 0) {
+                interest = true;
+            } else {
+                // If no write is pending, notify
+                endpoint.processSocket(socket, SocketStatus.OPEN_WRITE, true);
+            }
+        }
     }
 
 

Modified: tomcat/trunk/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1580032&r1=1580031&r2=1580032&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Fri Mar 21 19:50:51 2014
@@ -51,6 +51,13 @@
         Fix possibly incomplete final flush with NIO2 when using non blocking
         mode. (remm)
       </fix>
+      <fix>
+        Cleanup NIO2 endpoint shutdown. (remm)
+      </fix>
+      <fix>
+        Fix rare race condition notifying onWritePossible in the NIO2
+        HTTP/1.1 connector. (remm)
+      </fix>
     </changelog>
   </subsection>
   <subsection name="Jasper">



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org