You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2007/06/22 21:11:39 UTC

svn commit: r549935 - /jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/ThrottlingHttpServiceHandler.java

Author: olegk
Date: Fri Jun 22 12:11:39 2007
New Revision: 549935

URL: http://svn.apache.org/viewvc?view=rev&rev=549935
Log:
HTTPCORE-83: Revised synchronization on the connection state object

Modified:
    jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/ThrottlingHttpServiceHandler.java

Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/ThrottlingHttpServiceHandler.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/ThrottlingHttpServiceHandler.java?view=diff&rev=549935&r1=549934&r2=549935
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/ThrottlingHttpServiceHandler.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/ThrottlingHttpServiceHandler.java Fri Jun 22 12:11:39 2007
@@ -175,9 +175,6 @@
         final ServerConnState connState = (ServerConnState) context.getAttribute(CONN_STATE);
 
         synchronized (connState) {
-            connState.setInputState(ServerConnState.REQUEST_RECEIVED);
-            connState.setRequest(request);
-
             boolean contentExpected = false;
             if (request instanceof HttpEntityEnclosingRequest) {
                 HttpEntity entity = ((HttpEntityEnclosingRequest) request).getEntity();
@@ -195,7 +192,7 @@
                 public void run() {
                     try {
 
-                        handleRequest(connState, conn);
+                        handleRequest(request, connState, conn);
                         
                     } catch (IOException ex) {
                         shutdownConnection(conn, ex);
@@ -264,9 +261,10 @@
                     HttpEntity entity = response.getEntity();
 
                     if (statusCode >= 200 && entity == null) {
-                        connState.resetOutput();
-                        connState.resetInput();
+                        connState.setOutputState(ServerConnState.RESPONSE_DONE);
                         if (!connState.isWorkerRunning()) {
+                            connState.resetOutput();
+                            connState.resetInput();
                             conn.requestInput();
                         }
 
@@ -307,10 +305,11 @@
                 
                 buffer.produceContent(encoder);
                 if (encoder.isCompleted()) {
-                    connState.resetOutput();
-                    connState.resetInput();
+                    connState.setOutputState(ServerConnState.RESPONSE_BODY_DONE);
 
                     if (!connState.isWorkerRunning()) {
+                        connState.resetOutput();
+                        connState.resetInput();
                         conn.requestInput();
                     }
 
@@ -349,11 +348,11 @@
     }
     
     private void handleRequest(
+            final HttpRequest request,
             final ServerConnState connState,
             final NHttpServerConnection conn) throws HttpException, IOException {
 
         HttpContext context = conn.getContext();
-        HttpRequest request = null;
 
         // Block until previous request is fully processed and 
         // the worker thread no longer holds the shared buffer
@@ -373,11 +372,13 @@
                 connState.shutdown();
                 return;
             }
+            connState.setInputState(ServerConnState.REQUEST_RECEIVED);
+            connState.setRequest(request);
             connState.setWorkerRunning(true);
-            request = connState.getRequest();
-            HttpParamsLinker.link(request, this.params);
         }
 
+        HttpParamsLinker.link(request, this.params);
+
         context.setAttribute(HttpExecutionContext.HTTP_CONNECTION, conn);
         context.setAttribute(HttpExecutionContext.HTTP_REQUEST, request);
 
@@ -507,7 +508,10 @@
         }
         
         synchronized (connState) {
-            if (connState.getOutputState() == ServerConnState.READY && conn.isOpen()) {
+            if (connState.getOutputState() == ServerConnState.RESPONSE_DONE 
+                    && conn.isOpen()) {
+                connState.resetInput();
+                connState.resetOutput();
                 conn.requestInput();
             }
             connState.setWorkerRunning(false);
@@ -536,6 +540,8 @@
         public static final int REQUEST_BODY_DONE          = 4;
         public static final int RESPONSE_SENT              = 8;
         public static final int RESPONSE_BODY_STREAM       = 16;
+        public static final int RESPONSE_BODY_DONE         = 32;
+        public static final int RESPONSE_DONE              = 32;
         
         private final SharedInputBuffer inbuffer; 
         private final SharedOutputBuffer outbuffer;