You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by fh...@apache.org on 2007/02/23 13:58:50 UTC

svn commit: r510933 - /tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioBlockingSelector.java

Author: fhanik
Date: Fri Feb 23 04:58:49 2007
New Revision: 510933

URL: http://svn.apache.org/viewvc?view=rev&rev=510933
Log:
When a read or write times out, make sure the key is deregistered with the poller

Modified:
    tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioBlockingSelector.java

Modified: tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioBlockingSelector.java
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioBlockingSelector.java?view=diff&rev=510933&r1=510932&r2=510933
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioBlockingSelector.java (original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioBlockingSelector.java Fri Feb 23 04:58:49 2007
@@ -41,7 +41,7 @@
      * @throws IOException if an IO Exception occurs in the underlying socket logic
      */
     public static int write(ByteBuffer buf, NioChannel socket, long writeTimeout) throws IOException {
-        final SelectionKey key = socket.getIOChannel().keyFor(socket.getPoller().getSelector());
+        SelectionKey key = socket.getIOChannel().keyFor(socket.getPoller().getSelector());
         int written = 0;
         boolean timedout = false;
         int keycount = 1; //assume we can write
@@ -86,18 +86,22 @@
             if (timedout) 
                 throw new SocketTimeoutException();
         } finally {
-//            if (key != null) {
-//                socket.getPoller().addEvent(
-//                    new Runnable() {
-//                    public void run() {
-//                        key.cancel();
-//                    }
-//                });
-//            }
+            if (timedout && key != null) {
+                cancelKey(socket, key);
+            }
         }
         return written;
     }
 
+    private static void cancelKey(final NioChannel socket, final SelectionKey key) {
+        socket.getPoller().addEvent(
+            new Runnable() {
+            public void run() {
+                key.cancel();
+            }
+        });
+    }
+
     /**
      * Performs a blocking read using the bytebuffer for data to be read
      * If the <code>selector</code> parameter is null, then it will perform a busy read that could
@@ -149,14 +153,9 @@
             if (timedout)
                 throw new SocketTimeoutException();
         } finally {
-//            if (key != null) {
-//                socket.getPoller().addEvent(
-//                    new Runnable() {
-//                    public void run() {
-//                        key.cancel();
-//                    }
-//                });
-//            }
+            if (timedout && key != null) {
+                cancelKey(socket,key);
+            }
         }
         return read;
     }



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