Author: markt
Date: Wed Feb  6 18:49:49 2013
New Revision: 1443121

URL: http://svn.apache.org/viewvc?rev=1443121&view=rev
Log:
Move triggering of listener outside the sync block else users of the API 
(WebSocket in this case) can end up in deadlock through no fault of their own.

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

Modified: 
tomcat/trunk/java/org/apache/coyote/http11/upgrade/AbstractServletOutputStream.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/upgrade/AbstractServletOutputStream.java?rev=1443121&r1=1443120&r2=1443121&view=diff
==============================================================================
--- 
tomcat/trunk/java/org/apache/coyote/http11/upgrade/AbstractServletOutputStream.java
 (original)
+++ 
tomcat/trunk/java/org/apache/coyote/http11/upgrade/AbstractServletOutputStream.java
 Wed Feb  6 18:49:49 2013
@@ -130,12 +130,18 @@ public abstract class AbstractServletOut
         }
         // Make sure canWrite() and onWritePossible() have a consistent view of
         // buffer and fireListener when determining if the listener should fire
+        boolean fire = false;
+
         synchronized (fireListenerLock) {
             if (buffer == null && fireListener) {
                 fireListener = false;
-                listener.onWritePossible();
+                fire = true;
             }
         }
+        if (fire) {
+            listener.onWritePossible();
+        }
+
     }
 
     /**



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

Reply via email to