You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2013/09/03 21:04:00 UTC

svn commit: r1519798 - in /tomcat/trunk/java/org/apache/catalina/connector: CoyoteInputStream.java CoyoteOutputStream.java

Author: markt
Date: Tue Sep  3 19:04:00 2013
New Revision: 1519798

URL: http://svn.apache.org/r1519798
Log:
Fix failing unit test and Gump with BIO
Make the test for having to call isReady() before any non-blocking read or write stricter. Previously, an app would get away with this if isReady() would have returned true if it had been called.

Modified:
    tomcat/trunk/java/org/apache/catalina/connector/CoyoteInputStream.java
    tomcat/trunk/java/org/apache/catalina/connector/CoyoteOutputStream.java

Modified: tomcat/trunk/java/org/apache/catalina/connector/CoyoteInputStream.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/CoyoteInputStream.java?rev=1519798&r1=1519797&r2=1519798&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/connector/CoyoteInputStream.java (original)
+++ tomcat/trunk/java/org/apache/catalina/connector/CoyoteInputStream.java Tue Sep  3 19:04:00 2013
@@ -40,6 +40,7 @@ public class CoyoteInputStream extends S
 
 
     protected InputBuffer ib;
+    private volatile Boolean ready = null;
 
 
     protected CoyoteInputStream(InputBuffer ib) {
@@ -240,7 +241,8 @@ public class CoyoteInputStream extends S
 
     @Override
     public boolean isReady() {
-        return ib.isReady();
+        ready = Boolean.valueOf(ib.isReady());
+        return ready.booleanValue();
     }
 
 
@@ -251,9 +253,10 @@ public class CoyoteInputStream extends S
 
 
     private void checkNonBlockingRead() {
-        if (ib.isBlocking() && !ib.isReady()) {
+        if (ib.isBlocking() && (ready == null || !ready.booleanValue())) {
             throw new IllegalStateException(
                     sm.getString("coyoteInputStream.nbNotready"));
         }
+        ready = null;
     }
 }

Modified: tomcat/trunk/java/org/apache/catalina/connector/CoyoteOutputStream.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/CoyoteOutputStream.java?rev=1519798&r1=1519797&r2=1519798&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/connector/CoyoteOutputStream.java (original)
+++ tomcat/trunk/java/org/apache/catalina/connector/CoyoteOutputStream.java Tue Sep  3 19:04:00 2013
@@ -35,12 +35,8 @@ public class CoyoteOutputStream extends 
             StringManager.getManager(Constants.Package);
 
 
-    // ----------------------------------------------------- Instance Variables
-
     protected OutputBuffer ob;
-
-
-    // ----------------------------------------------------------- Constructors
+    private volatile Boolean ready = null;
 
 
     protected CoyoteOutputStream(OutputBuffer ob) {
@@ -48,22 +44,15 @@ public class CoyoteOutputStream extends 
     }
 
 
-    // --------------------------------------------------------- Public Methods
-
-
     /**
      * Prevent cloning the facade.
      */
     @Override
-    protected Object clone()
-        throws CloneNotSupportedException {
+    protected Object clone() throws CloneNotSupportedException {
         throw new CloneNotSupportedException();
     }
 
 
-    // -------------------------------------------------------- Package Methods
-
-
     /**
      * Clear facade.
      */
@@ -72,9 +61,6 @@ public class CoyoteOutputStream extends 
     }
 
 
-    // --------------------------------------------------- OutputStream Methods
-
-
     @Override
     public void write(int i) throws IOException {
         boolean nonBlocking = checkNonBlockingWrite();
@@ -124,10 +110,11 @@ public class CoyoteOutputStream extends 
      */
     private boolean checkNonBlockingWrite() {
         boolean nonBlocking = !ob.isBlocking();
-        if (nonBlocking && !ob.isReady()) {
+        if (nonBlocking && (ready == null || !ready.booleanValue())) {
             throw new IllegalStateException(
                     sm.getString("coyoteOutputStream.nbNotready"));
         }
+        ready = null;
         return nonBlocking;
     }
 
@@ -153,7 +140,8 @@ public class CoyoteOutputStream extends 
 
     @Override
     public boolean isReady() {
-        return ob.isReady();
+        ready = Boolean.valueOf(ob.isReady());
+        return ready.booleanValue();
     }
 
 



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