Author: markt
Date: Wed Feb  4 21:35:47 2015
New Revision: 1657406

URL: http://svn.apache.org/r1657406
Log:
Fix another source of multiple write registrations.

Modified:
    
tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeServletOutputStream.java

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=1657406&r1=1657405&r2=1657406&view=diff
==============================================================================
--- 
tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeServletOutputStream.java
 (original)
+++ 
tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeServletOutputStream.java
 Wed Feb  4 21:35:47 2015
@@ -74,9 +74,15 @@ public class UpgradeServletOutputStream
         // fireListener when determining if the listener should fire
         synchronized (fireListenerLock) {
             if (flushing) {
-                socketWrapper.registerWriteInterest();
+                // Since flushing is true the socket must already be registered
+                // for write and multiple registrations will cause problems.
                 fireListener = true;
                 return false;
+            } else if (fireListener){
+                // If the listener is configured to fire then the socket must
+                // already be registered for write and multiple registrations
+                // will cause problems.
+                return false;
             } else {
                 boolean result = socketWrapper.isReadyForWrite();
                 fireListener = !result;
@@ -141,6 +147,9 @@ public class UpgradeServletOutputStream
             synchronized (writeLock) {
                 if (updateFlushing) {
                     flushing = socketWrapper.flush(block);
+                    if (flushing) {
+                        socketWrapper.registerWriteInterest();
+                    }
                 } else {
                     socketWrapper.flush(block);
                 }
@@ -187,7 +196,6 @@ public class UpgradeServletOutputStream
         if (flushing) {
             flushInternal(false, true);
             if (flushing) {
-                socketWrapper.registerWriteInterest();
                 return;
             }
         } else {



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

Reply via email to