Author: markt
Date: Sun Oct  6 21:43:18 2013
New Revision: 1529697

URL: http://svn.apache.org/r1529697
Log:
Fix the logic for handling dispatches in a thread-safe manner. May be scope for 
a more efficient implementation.

Modified:
    tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java
    tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapper.java

Modified: tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java?rev=1529697&r1=1529696&r2=1529697&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java (original)
+++ tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java Sun Oct  6 
21:43:18 2013
@@ -681,7 +681,7 @@ public abstract class AbstractProtocol<S
                     }
                 } while (state == SocketState.ASYNC_END ||
                         state == SocketState.UPGRADING ||
-                        dispatches.hasNext() && state != SocketState.CLOSED);
+                        dispatches != null && dispatches.hasNext() && state != 
SocketState.CLOSED);
 
                 if (state == SocketState.LONG) {
                     // In the middle of processing a request/response. Keep the

Modified: tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapper.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapper.java?rev=1529697&r1=1529696&r2=1529697&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapper.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapper.java Sun Oct  6 
21:43:18 2013
@@ -122,7 +122,11 @@ public class SocketWrapper<E> {
         Iterator<DispatchType> result;
         synchronized (dispatches) {
             result = dispatches.iterator();
-            dispatches.clear();
+            if (result.hasNext()) {
+                dispatches.clear();
+            } else {
+                result = null;
+            }
         }
         return result;
     }



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

Reply via email to