Make the new way of handling processors work with the ability to read headers in...
authorfhanik <fhanik@13f79535-47bb-0310-9956-ffa450edef68>
Tue, 29 May 2007 20:26:49 +0000 (20:26 +0000)
committerfhanik <fhanik@13f79535-47bb-0310-9956-ffa450edef68>
Tue, 29 May 2007 20:26:49 +0000 (20:26 +0000)
git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@542644 13f79535-47bb-0310-9956-ffa450edef68

java/org/apache/coyote/http11/Http11NioProcessor.java
java/org/apache/coyote/http11/Http11NioProtocol.java
java/org/apache/tomcat/util/net/NioBlockingSelector.java
java/org/apache/tomcat/util/net/NioEndpoint.java

index dca4cb8..4e6948b 100644 (file)
@@ -955,7 +955,8 @@ public class Http11NioProcessor implements ActionHook {
             }
         } else {
             if ( recycle ) recycle();
-            return (openSocket) ? SocketState.OPEN : SocketState.CLOSED;
+            //return (openSocket) ? (SocketState.OPEN) : SocketState.CLOSED;
+            return (openSocket) ? (recycle?SocketState.OPEN:SocketState.LONG) : SocketState.CLOSED;
         }
 
     }
index defcaa4..53e858e 100644 (file)
@@ -622,6 +622,14 @@ public class Http11NioProtocol implements ProtocolHandler, MBeanRegistration
         public void releaseCaches() {
             recycledProcessors.clear();
         }
+        
+        public void release(NioChannel socket) {
+            Http11NioProcessor result = connections.remove(socket);
+            if ( result != null ) {
+                result.recycle();
+                recycledProcessors.offer(result);
+            }
+        }
 
         public SocketState event(NioChannel socket, SocketStatus status) {
             Http11NioProcessor result = connections.get(socket);
@@ -672,6 +680,8 @@ public class Http11NioProtocol implements ProtocolHandler, MBeanRegistration
         public SocketState process(NioChannel socket) {
             Http11NioProcessor processor = null;
             try {
+                processor = connections.remove(socket);
+                
                 if (processor == null) {
                     processor = recycledProcessors.poll();
                 }
index eb49ba2..79027d8 100644 (file)
@@ -99,7 +99,7 @@ public class NioBlockingSelector {
         socket.getPoller().addEvent(
             new Runnable() {
             public void run() {
-                key.cancel();
+                socket.getPoller().cancelledKey(key,SocketStatus.ERROR,false);
             }
         });
     }
index 7f28295..bbc14cb 100644 (file)
@@ -1393,6 +1393,7 @@ public class NioEndpoint {
                     processSocket(ka.getChannel(), status, false);//don't dispatch if the lines below are cancelling the key
                     if (status == SocketStatus.TIMEOUT ) return; // don't close on comet timeout
                 }
+                handler.release(ka.getChannel());
                 if (key.isValid()) key.cancel();
                 if (key.channel().isOpen()) try {key.channel().close();}catch (Exception ignore){}
                 try {ka.channel.close(true);}catch (Exception ignore){}
@@ -1922,6 +1923,7 @@ public class NioEndpoint {
         public SocketState process(NioChannel socket);
         public SocketState event(NioChannel socket, SocketStatus status);
         public void releaseCaches();
+        public void release(NioChannel socket);
     }