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