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/09/30 16:36:07 UTC

svn commit: r580730 - in /jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http: impl/nio/DefaultNHttpClientConnection.java impl/nio/DefaultNHttpServerConnection.java impl/nio/NHttpConnectionBase.java nio/NHttpConnection.java

Author: olegk
Date: Sun Sep 30 07:36:07 2007
New Revision: 580730

URL: http://svn.apache.org/viewvc?rev=580730&view=rev
Log:
HTTPCORE-117: 
* Reverted my previous changes preventing the session output buffer from being flushed upon connection closure
* Introduced connection status attribute indicating whether the connection is active, closed or is in the process of flushing the content of its session output buffer

Modified:
    jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/DefaultNHttpClientConnection.java
    jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/DefaultNHttpServerConnection.java
    jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/NHttpConnectionBase.java
    jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/NHttpConnection.java

Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/DefaultNHttpClientConnection.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/DefaultNHttpClientConnection.java?rev=580730&r1=580729&r2=580730&view=diff
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/DefaultNHttpClientConnection.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/DefaultNHttpClientConnection.java Sun Sep 30 07:36:07 2007
@@ -102,7 +102,7 @@
     }
     
     public void consumeInput(final NHttpClientHandler handler) {
-        if (this.closed) {
+        if (this.status != ACTIVE) {
             this.session.clearEvent(EventMask.READ);
             return;
         }
@@ -159,8 +159,9 @@
                 }
             }
             if (!this.outbuf.hasData()) {
-                if (this.closed) {
+                if (this.status == CLOSING) {
                     this.session.close();
+                    this.status = CLOSED;
                     resetOutput();
                     return;
                 } else {
@@ -173,8 +174,9 @@
                 }
                 
                 if (this.contentEncoder == null && !this.outbuf.hasData()) {
-                    if (this.closed) {
+                    if (this.status == CLOSING) {
                         this.session.close();
+                        this.status = CLOSED;
                         return;
                     }
                     

Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/DefaultNHttpServerConnection.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/DefaultNHttpServerConnection.java?rev=580730&r1=580729&r2=580730&view=diff
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/DefaultNHttpServerConnection.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/DefaultNHttpServerConnection.java Sun Sep 30 07:36:07 2007
@@ -99,7 +99,7 @@
     }
     
     public void consumeInput(final NHttpServiceHandler handler) {
-        if (this.closed) {
+        if (this.status != ACTIVE) {
             this.session.clearEvent(EventMask.READ);
             return;
         }
@@ -158,8 +158,9 @@
                 }
             }
             if (!this.outbuf.hasData()) {
-                if (this.closed) {
+                if (this.status == CLOSING) {
                     this.session.close();
+                    this.status = CLOSED;
                     resetOutput();
                     return;
                 } else {
@@ -172,8 +173,9 @@
                 }
                 
                 if (this.contentEncoder == null && !this.outbuf.hasData()) {
-                    if (this.closed) {
+                    if (this.status == CLOSING) {
                         this.session.close();
+                        this.status = CLOSED;
                         return;
                     }
                     

Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/NHttpConnectionBase.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/NHttpConnectionBase.java?rev=580730&r1=580729&r2=580730&view=diff
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/NHttpConnectionBase.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/NHttpConnectionBase.java Sun Sep 30 07:36:07 2007
@@ -95,7 +95,7 @@
     protected volatile HttpRequest request;
     protected volatile HttpResponse response;
 
-    protected volatile boolean closed;
+    protected volatile int status;
     
     public NHttpConnectionBase(
             final IOSession session,
@@ -129,9 +129,13 @@
                 this.inTransportMetrics, 
                 this.outTransportMetrics);
         
-        this.closed = false;
         this.session.setBufferStatus(this);
         this.session.setEvent(EventMask.READ);
+        this.status = ACTIVE;
+    }
+
+    public int getStatus() {
+        return this.status;
     }
 
     public HttpContext getContext() {
@@ -230,18 +234,26 @@
     }
     
     protected void assertNotClosed() throws IOException {
-        if (this.closed) {
+        if (this.status != ACTIVE) {
             throw new ConnectionClosedException("Connection is closed");
         }
     }
 
     public void close() throws IOException {
-        this.closed = true;
-        this.session.close();
+        if (this.status != ACTIVE) {
+            return;
+        }
+        this.status = CLOSING;
+        if (this.outbuf.hasData()) {
+            this.session.setEvent(EventMask.WRITE);
+        } else {
+            this.session.close();
+            this.status = CLOSED;
+        }
     }
 
     public boolean isOpen() {
-        return !this.closed && !this.session.isClosed();
+        return this.status == ACTIVE && !this.session.isClosed();
     }
 
     public boolean isStale() {
@@ -293,7 +305,7 @@
     }
 
     public void shutdown() throws IOException {
-        this.closed = true;
+        this.status = CLOSED;
         this.session.shutdown();
     }
 

Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/NHttpConnection.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/NHttpConnection.java?rev=580730&r1=580729&r2=580730&view=diff
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/NHttpConnection.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/NHttpConnection.java Sun Sep 30 07:36:07 2007
@@ -45,6 +45,12 @@
  */
 public interface NHttpConnection extends HttpConnection, IOControl {
 
+    public static final int ACTIVE      = 0;
+    public static final int CLOSING     = 1;
+    public static final int CLOSED      = 2;
+    
+    int getStatus();
+    
     /** 
      * Returns the current HTTP request if one is being received / transmitted.
      * Otherwise returns <tt>null</tt>.