Author: fhanik
Date: Thu Jun 22 13:28:27 2006
New Revision: 416461

URL: http://svn.apache.org/viewvc?rev=416461&view=rev
Log:
Two fixes,
process timeouts last, no need to check a timeout on a valid read. hence we do 
it after we process the actual operations
Throw an IO exception if we reach end of stream so that the sockets can get 
properly closed down
Speed is the same for nio and io right now, nio seems just a tad faster without 
keep alives

Modified:
    
tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/InternalNioInputBuffer.java
    tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java

Modified: 
tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/InternalNioInputBuffer.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/InternalNioInputBuffer.java?rev=416461&r1=416460&r2=416461&view=diff
==============================================================================
--- 
tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/InternalNioInputBuffer.java 
(original)
+++ 
tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/InternalNioInputBuffer.java 
Thu Jun 22 13:28:27 2006
@@ -559,7 +559,8 @@
                 lastValid = pos + nRead;
                 return true;
             } else if (nRead == -1) {
-                return false;
+                //return false;
+                throw new IOException("end of stream reached.");
             }
             timedOut = (readTimeout != -1) && 
((System.currentTimeMillis()-start)>this.readTimeout);
             if ( !timedOut && nRead == 0 ) 

Modified: tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java?rev=416461&r1=416460&r2=416461&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java 
(original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java Thu 
Jun 22 13:28:27 2006
@@ -1191,32 +1191,15 @@
                     log.error("",x);
                     continue;
                 }
-                //timeout
-                Set keys = selector.keys();
-                long now = System.currentTimeMillis();
-                for (Iterator iter = keys.iterator(); iter.hasNext(); ) {
-                    SelectionKey key = (SelectionKey) iter.next();
-                    try {
-                        if (key.interestOps() == SelectionKey.OP_READ) {
-                            //only timeout sockets that we are waiting for a 
read from
-                            KeyAttachment ka = (KeyAttachment) 
key.attachment();
-                            long delta = now - ka.getLastAccess();
-                            if (delta > (long) soTimeout) {
-                                cancelledKey(key);
-                            }
-                        }
-                    }catch ( CancelledKeyException ckx ) {
-                        cancelledKey(key);
-                    }
-                }
+                
             
 
-                if (keyCount == 0) continue;
+                //if (keyCount == 0) continue;
 
-                Iterator iterator = selector.selectedKeys().iterator();
+                Iterator iterator = keyCount > 0 ? 
selector.selectedKeys().iterator() : null;
                 // Walk through the collection of ready keys and dispatch
                 // any active event.
-                while (iterator.hasNext()) {
+                while (iterator != null && iterator.hasNext()) {
                     SelectionKey sk = (SelectionKey) iterator.next();
                     iterator.remove();
                     KeyAttachment attachment = (KeyAttachment)sk.attachment();
@@ -1255,7 +1238,25 @@
                     }
                 }//while
 
-                
+                //timeout
+                Set keys = selector.keys();
+                long now = System.currentTimeMillis();
+                for (Iterator iter = keys.iterator(); iter.hasNext(); ) {
+                    SelectionKey key = (SelectionKey) iter.next();
+                    try {
+                        if (key.interestOps() == SelectionKey.OP_READ) {
+                            //only timeout sockets that we are waiting for a 
read from
+                            KeyAttachment ka = (KeyAttachment) 
key.attachment();
+                            long delta = now - ka.getLastAccess();
+                            if (delta > (long) soTimeout) {
+                                cancelledKey(key);
+                            }
+                        }
+                    }catch ( CancelledKeyException ckx ) {
+                        cancelledKey(key);
+                    }
+                }
+
             }
             synchronized (this) {
                 this.notifyAll();



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to