Author: markt
Date: Wed Jun  1 21:44:37 2016
New Revision: 1746503

URL: http://svn.apache.org/viewvc?rev=1746503&view=rev
Log:
Add a SocketProcessor cache to align with NIO/NIO2

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=1746503&r1=1746502&r2=1746503&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java Wed Jun  1 
21:44:37 2016
@@ -51,6 +51,7 @@ import org.apache.tomcat.jni.Socket;
 import org.apache.tomcat.jni.Status;
 import org.apache.tomcat.util.ExceptionUtils;
 import org.apache.tomcat.util.buf.ByteBufferUtils;
+import org.apache.tomcat.util.collections.SynchronizedStack;
 import org.apache.tomcat.util.net.AbstractEndpoint.Acceptor.AcceptorState;
 import org.apache.tomcat.util.net.AbstractEndpoint.Handler.SocketState;
 import org.apache.tomcat.util.net.SSLHostConfig.Type;
@@ -106,6 +107,11 @@ public class AprEndpoint extends Abstrac
 
     private final Map<Long,AprSocketWrapper> connections = new 
ConcurrentHashMap<>();
 
+    /**
+     * Cache for SocketProcessor objects
+     */
+    private SynchronizedStack<SocketProcessor> processorCache;
+
     // ------------------------------------------------------------ Constructor
 
     public AprEndpoint() {
@@ -533,6 +539,9 @@ public class AprEndpoint extends Abstrac
             running = true;
             paused = false;
 
+            processorCache = new 
SynchronizedStack<>(SynchronizedStack.DEFAULT_SIZE,
+                    socketProperties.getProcessorCache());
+
             // Create worker collection
             if (getExecutor() == null) {
                 createExecutor();
@@ -622,6 +631,7 @@ public class AprEndpoint extends Abstrac
                 }
                 sendfile = null;
             }
+            processorCache.clear();
         }
         shutdownExecutor();
     }
@@ -821,12 +831,17 @@ public class AprEndpoint extends Abstrac
             // result of calling AsyncContext.dispatch() from a non-container
             // thread
             synchronized (socketWrapper) {
-                SocketProcessor proc = new SocketProcessor(socketWrapper, 
event);
+                SocketProcessor sc = processorCache.pop();
+                if (sc == null) {
+                    sc = new SocketProcessor(socketWrapper, event);
+                } else {
+                    sc.reset(socketWrapper, event);
+                }
                 Executor executor = getExecutor();
                 if (dispatch && executor != null) {
-                    executor.execute(proc);
+                    executor.execute(sc);
                 } else {
-                    proc.run();
+                    sc.run();
                 }
             }
         } catch (RejectedExecutionException ree) {



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

Reply via email to