Author: remm
Date: Wed May 27 17:45:31 2015
New Revision: 1682087

URL: http://svn.apache.org/r1682087
Log:
Avoid IO peeking with NIO2 to read the request line (introduced in r1681742), 
as the processor and its buffer is no longer associated and may not be the one 
processing the request.

Modified:
    tomcat/trunk/java/org/apache/coyote/http11/Http11InputBuffer.java
    tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java
    tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapperBase.java

Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11InputBuffer.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11InputBuffer.java?rev=1682087&r1=1682086&r2=1682087&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11InputBuffer.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11InputBuffer.java Wed May 
27 17:45:31 2015
@@ -398,6 +398,9 @@ public class Http11InputBuffer implement
                         // Haven't read any request data yet so use the 
keep-alive
                         // timeout.
                         
wrapper.setReadTimeout(wrapper.getEndpoint().getKeepAliveTimeout());
+                        if (!wrapper.isNonBlocking()) {
+                            return false;
+                        }
                     }
                     if (!fill(false)) {
                         // A read is pending, so no longer in initial state

Modified: tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java?rev=1682087&r1=1682086&r2=1682087&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java Wed May 27 
17:45:31 2015
@@ -1316,6 +1316,10 @@ public class Nio2Endpoint extends Abstra
             }
         }
 
+        @Override
+        public boolean isNonBlocking() {
+            return false;
+        }
 
         /*
          * This should only be called from a thread that currently holds a lock

Modified: tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapperBase.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapperBase.java?rev=1682087&r1=1682086&r2=1682087&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapperBase.java 
(original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapperBase.java Wed May 
27 17:45:31 2015
@@ -266,6 +266,9 @@ public abstract class SocketWrapperBase<
     public SocketBufferHandler getSocketBufferHandler() { return 
socketBufferHandler; }
     public abstract boolean isReadPending();
     public abstract boolean isWritePending();
+    public boolean isNonBlocking() {
+        return true;
+    }
 
     public boolean hasDataToWrite() {
         return !socketBufferHandler.isWriteBufferEmpty() || 
bufferedWrites.size() > 0;



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to