Author: markt
Date: Wed Aug 28 10:58:05 2013
New Revision: 1518158

URL: http://svn.apache.org/r1518158
Log:
Remove nbRead(). Calls to available() now trigger a call of fill(false) (i.e. 
non-blocking). This avoids a problem observed on the users list where repeated 
calls to available() in turn triggered calls to nbRead() that resulted in the 
buffer being expanded as nbRead() didn't reset pos and lastValid when adding 
data to what was essentially an empty buffer.

Modified:
    tomcat/trunk/java/org/apache/coyote/http11/AbstractInputBuffer.java
    tomcat/trunk/java/org/apache/coyote/http11/InternalAprInputBuffer.java
    tomcat/trunk/java/org/apache/coyote/http11/InternalInputBuffer.java
    tomcat/trunk/java/org/apache/coyote/http11/InternalNioInputBuffer.java

Modified: tomcat/trunk/java/org/apache/coyote/http11/AbstractInputBuffer.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/AbstractInputBuffer.java?rev=1518158&r1=1518157&r2=1518158&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/AbstractInputBuffer.java 
(original)
+++ tomcat/trunk/java/org/apache/coyote/http11/AbstractInputBuffer.java Wed Aug 
28 10:58:05 2013
@@ -244,12 +244,6 @@ public abstract class AbstractInputBuffe
     protected abstract void init(SocketWrapper<S> socketWrapper,
             AbstractEndpoint endpoint) throws IOException;
 
-    /**
-     * Issues a non blocking read.
-     * @return int  Number of bytes read
-     */
-    protected abstract int nbRead() throws IOException;
-
     protected abstract Log getLog();
 
 
@@ -348,7 +342,8 @@ public abstract class AbstractInputBuffe
         }
 
         try {
-            available = nbRead();
+            fill(false);
+            available = lastValid - pos;
         } catch (IOException ioe) {
             if (getLog().isDebugEnabled()) {
                 getLog().debug(sm.getString("iib.available.readFail"), ioe);

Modified: tomcat/trunk/java/org/apache/coyote/http11/InternalAprInputBuffer.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/InternalAprInputBuffer.java?rev=1518158&r1=1518157&r2=1518158&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/InternalAprInputBuffer.java 
(original)
+++ tomcat/trunk/java/org/apache/coyote/http11/InternalAprInputBuffer.java Wed 
Aug 28 10:58:05 2013
@@ -627,32 +627,6 @@ public class InternalAprInputBuffer exte
 
 
     @Override
-    protected int nbRead() throws IOException {
-        bbuf.clear();
-        int nRead = doReadSocket(false);
-
-        if (nRead > 0) {
-            bbuf.limit(nRead);
-            bbuf.get(buf, pos, nRead);
-            lastValid = pos + nRead;
-            return nRead;
-        } else if (-nRead == Status.EAGAIN) {
-            return 0;
-        } else if (-nRead == Status.TIMEUP) {
-            // Attempting to read from the socket when the poller has not
-            // signalled that there is data to read appears to behave like a
-            // blocking read with a short timeout on OSX rather than like a
-            // non-blocking read. If no data is read, treat the resulting
-            // timeout like a non-blocking read that returned no data.
-            return 0;
-        } else {
-            throw new IOException(sm.getString("iib.failedread.apr",
-                    Integer.valueOf(-nRead)));
-        }
-    }
-
-
-    @Override
     protected final Log getLog() {
         return log;
     }

Modified: tomcat/trunk/java/org/apache/coyote/http11/InternalInputBuffer.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/InternalInputBuffer.java?rev=1518158&r1=1518157&r2=1518158&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/InternalInputBuffer.java 
(original)
+++ tomcat/trunk/java/org/apache/coyote/http11/InternalInputBuffer.java Wed Aug 
28 10:58:05 2013
@@ -553,15 +553,6 @@ public class InternalInputBuffer extends
 
 
     @Override
-    protected int nbRead() throws IOException {
-        // If this gets called for BIO need to make caller think there is data
-        // to read as BIO always reads whether there is data or not (and blocks
-        // until there is data to read).
-        return 1;
-    }
-
-
-    @Override
     protected final Log getLog() {
         return log;
     }

Modified: tomcat/trunk/java/org/apache/coyote/http11/InternalNioInputBuffer.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/InternalNioInputBuffer.java?rev=1518158&r1=1518157&r2=1518158&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/InternalNioInputBuffer.java 
(original)
+++ tomcat/trunk/java/org/apache/coyote/http11/InternalNioInputBuffer.java Wed 
Aug 28 10:58:05 2013
@@ -158,12 +158,6 @@ public class InternalNioInputBuffer exte
     // --------------------------------------------------------- Public Methods
 
     @Override
-    public int nbRead() throws IOException {
-        return readSocket(true,false);
-    }
-
-
-    @Override
     protected final Log getLog() {
         return log;
     }



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

Reply via email to