Author: markt
Date: Thu Jan  8 13:11:31 2015
New Revision: 1650286

URL: http://svn.apache.org/r1650286
Log:
Differentiate between checking to see if OutputBuffer has data to write
and isReady() (for write). The later requires a write registration if it
is not ready.

Modified:
    tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java
    
tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeServletOutputStream.java
    tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java
    tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapperBase.java

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=1650286&r1=1650285&r2=1650286&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java Thu Jan  8 
13:11:31 2015
@@ -586,7 +586,7 @@ public class AjpProcessor<S> extends Abs
         }
         case NB_WRITE_INTEREST: {
             AtomicBoolean isReady = (AtomicBoolean)param;
-            boolean result = !socketWrapper.hasDataToWrite() && responseMsgPos 
== -1;
+            boolean result = socketWrapper.isReadyForWrite() && responseMsgPos 
== -1;
             isReady.set(result);
             if (!result) {
                 registerForEvent(false, true);

Modified: 
tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeServletOutputStream.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeServletOutputStream.java?rev=1650286&r1=1650285&r2=1650286&view=diff
==============================================================================
--- 
tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeServletOutputStream.java
 (original)
+++ 
tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeServletOutputStream.java
 Thu Jan  8 13:11:31 2015
@@ -72,7 +72,7 @@ public class UpgradeServletOutputStream
         // Make sure isReady() and onWritePossible() have a consistent view of
         // buffer and fireListener when determining if the listener should fire
         synchronized (fireListenerLock) {
-            boolean result = !socketWrapper.hasDataToWrite();
+            boolean result = socketWrapper.isReadyForWrite();
             fireListener = !result;
             return result;
         }
@@ -170,7 +170,7 @@ public class UpgradeServletOutputStream
         // should fire
         boolean fire = false;
         synchronized (fireListenerLock) {
-            if (!socketWrapper.hasDataToWrite() && fireListener) {
+            if (socketWrapper.isReadyForWrite() && fireListener) {
                 fireListener = false;
                 fire = true;
             }

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=1650286&r1=1650285&r2=1650286&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java Thu Jan  8 
13:11:31 2015
@@ -1268,6 +1268,16 @@ public class Nio2Endpoint extends Abstra
 
 
         @Override
+        public boolean isReadyForWrite() {
+            boolean result = super.isReadyForWrite();
+            if (!result) {
+                writeInterest = true;
+            }
+            return result;
+        }
+
+
+        @Override
         public void registerWriteInterest() {
             synchronized (writeCompletionHandler) {
                 if (writePending.availablePermits() == 0) {

Modified: tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapperBase.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapperBase.java?rev=1650286&r1=1650285&r2=1650286&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapperBase.java 
(original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapperBase.java Thu Jan 
 8 13:11:31 2015
@@ -198,6 +198,9 @@ public abstract class SocketWrapperBase<
         return hasMoreDataToFlush() || hasBufferedData();
     }
 
+    public boolean isReadyForWrite() {
+        return !hasDataToWrite();
+    }
 
     public void addDispatch(DispatchType dispatchType) {
         synchronized (dispatches) {



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

Reply via email to