Connector re-factoring
authormarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Fri, 17 Jun 2011 21:56:58 +0000 (21:56 +0000)
committermarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Fri, 17 Jun 2011 21:56:58 +0000 (21:56 +0000)
First step towards removing SocketState.ASYNC_END from the endpoint
Also a few percent faster, at least running the Async unit tests

git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@1137047 13f79535-47bb-0310-9956-ffa450edef68

java/org/apache/coyote/http11/Http11Protocol.java

index 8cc9016..0ad5283 100644 (file)
@@ -154,19 +154,22 @@ public class Http11Protocol extends AbstractHttp11JsseProtocol {
                     processor.setSSLSupport(null);
                 }
                 
-                SocketState state;
-                if (socket.isAsync()) {
-                    state = processor.asyncDispatch(status);
-                } else {
-                    state = processor.process(socket);
-                }
-
-                if (processor.isAsync()) {
-                    state = processor.asyncPostProcess();
-                }
-
-                if (state == SocketState.LONG ||
-                        state == SocketState.ASYNC_END) {
+                SocketState state = SocketState.CLOSED;
+                do {
+                    if (socket.isAsync() || state == SocketState.ASYNC_END) {
+                        state = processor.asyncDispatch(status);
+                    } else {
+                        state = processor.process(socket);
+                    }
+    
+                    if (processor.isAsync()) {
+                        state = processor.asyncPostProcess();
+                    }
+                } while (state == SocketState.ASYNC_END);
+                // TODO Better to add a new state to the AsyncStateMachine and
+                //      remove ASYNC_END entirely
+
+                if (state == SocketState.LONG) {
                     connections.put(socket, processor);
                     socket.setAsync(true);
                 } else {