You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by re...@apache.org on 2014/06/27 17:52:04 UTC

svn commit: r1606136 - in /tomcat/trunk: java/org/apache/catalina/connector/InputBuffer.java java/org/apache/coyote/AbstractProtocol.java java/org/apache/coyote/http11/filters/IdentityInputFilter.java webapps/docs/changelog.xml

Author: remm
Date: Fri Jun 27 15:52:03 2014
New Revision: 1606136

URL: http://svn.apache.org/r1606136
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=56663
BZ56663: Improve available to also include buffered bytes in the Servlet layer, handle a case (thanks telnet) where the amount of remaining bytes could become negative (the input is still finished then of course), filter an extra write event with non blocking write IO if async completes after the first read.

Modified:
    tomcat/trunk/java/org/apache/catalina/connector/InputBuffer.java
    tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java
    tomcat/trunk/java/org/apache/coyote/http11/filters/IdentityInputFilter.java
    tomcat/trunk/webapps/docs/changelog.xml

Modified: tomcat/trunk/java/org/apache/catalina/connector/InputBuffer.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/InputBuffer.java?rev=1606136&r1=1606135&r2=1606136&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/connector/InputBuffer.java (original)
+++ tomcat/trunk/java/org/apache/catalina/connector/InputBuffer.java Fri Jun 27 15:52:03 2014
@@ -266,7 +266,17 @@ public class InputBuffer extends Reader
 
 
     public boolean isFinished() {
-        return coyoteRequest.isFinished();
+        int available = 0;
+        if (state == BYTE_STATE) {
+            available = bb.getLength();
+        } else if (state == CHAR_STATE) {
+            available = cb.getLength();
+        }
+        if (available > 0) {
+            return false;
+        } else {
+            return coyoteRequest.isFinished();
+        }
     }
 
 

Modified: tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java?rev=1606136&r1=1606135&r2=1606136&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java (original)
+++ tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java Fri Jun 27 15:52:03 2014
@@ -651,6 +651,9 @@ public abstract class AbstractProtocol<S
                         state = processor.event(status);
                     } else if (processor.isUpgrade()) {
                         state = processor.upgradeDispatch(status);
+                    } else if (status == SocketStatus.OPEN_WRITE) {
+                        // Extra write event likely after async, ignore
+                        state = SocketState.LONG;
                     } else {
                         state = processor.process(wrapper);
                     }

Modified: tomcat/trunk/java/org/apache/coyote/http11/filters/IdentityInputFilter.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/filters/IdentityInputFilter.java?rev=1606136&r1=1606135&r2=1606136&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/filters/IdentityInputFilter.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/filters/IdentityInputFilter.java Fri Jun 27 15:52:03 2014
@@ -214,6 +214,6 @@ public class IdentityInputFilter impleme
     public boolean isFinished() {
         // Only finished if a content length is defined and there is no data
         // remaining
-        return contentLength > -1 && remaining == 0;
+        return contentLength > -1 && remaining <= 0;
     }
 }

Modified: tomcat/trunk/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1606136&r1=1606135&r2=1606136&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Fri Jun 27 15:52:03 2014
@@ -90,6 +90,15 @@
       </fix>
     </changelog>
   </subsection>
+  <subsection name="Coyote">
+    <changelog>
+      <fix>
+        <bug>56663</bug>: Fix edge cases demonstrated by ByteCounter relating
+        to data available, remaining and extra write events, mostly occurring
+        with non blocking Servlet 3.1. (remm)
+      </fix>
+    </changelog>
+  </subsection>
   <subsection name="Jasper">
     <changelog>
       <fix>



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org