Connector re-factoring
authormarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Fri, 17 Jun 2011 22:01:35 +0000 (22:01 +0000)
committermarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Fri, 17 Jun 2011 22:01:35 +0000 (22:01 +0000)
Align Ajp impl with Http impl for BIO

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

java/org/apache/coyote/ajp/AjpProtocol.java

index bcbb597..ab1e149 100644 (file)
@@ -135,13 +135,24 @@ public class AjpProtocol extends AbstractAjpProtocol {
                     processor = createProcessor();
                 }
 
-                SocketState state = socket.isAsync()?processor.asyncDispatch(status):processor.process(socket);
+                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);
-                    // longPoll may change socket state (e.g. to trigger a
-                    // complete or dispatch)
-                    return processor.asyncPostProcess();
                 } else {
                     socket.setAsync(false);
                     processor.recycle();