tomcat-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ma...@apache.org
Subject svn commit: r1488793 - /tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java
Date Sun, 02 Jun 2013 21:14:29 GMT
Author: markt
Date: Sun Jun  2 21:14:29 2013
New Revision: 1488793

URL: http://svn.apache.org/r1488793
Log:
Better handling of socket close as there might be multiple threads working with the socket

Modified:
    tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java

Modified: tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java?rev=1488793&r1=1488792&r2=1488793&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java Sun Jun  2 21:14:29 2013
@@ -830,7 +830,10 @@ public class AprEndpoint extends Abstrac
             } else {
                 SocketWrapper<Long> wrapper =
                         connections.get(Long.valueOf(socket));
-                executor.execute(new SocketProcessor(wrapper, status));
+                // Make sure connection hasn't been closed
+                if (wrapper != null) {
+                    executor.execute(new SocketProcessor(wrapper, status));
+                }
             }
         } catch (RejectedExecutionException x) {
             log.warn("Socket processing request was rejected for:"+socket,x);
@@ -2238,10 +2241,15 @@ public class AprEndpoint extends Abstrac
 
         private void doRun() {
             // Process the request from this socket
+            if (socket.getSocket() == null) {
+                // Closed in another thread
+                return;
+            }
             SocketState state = handler.process(socket, status);
             if (state == Handler.SocketState.CLOSED) {
                 // Close socket and pool
                 destroySocket(socket.getSocket().longValue());
+                socket.socket = null;
             } else if (state == Handler.SocketState.LONG) {
                 socket.access();
                 if (socket.async) {



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


Mime
View raw message