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 2008/12/10 21:28:19 UTC

svn commit: r725417 - in /tomcat/trunk/java/org/apache/tomcat/util/net: NioChannel.java NioEndpoint.java SecureNioChannel.java

Author: fhanik
Date: Wed Dec 10 12:28:19 2008
New Revision: 725417

URL: http://svn.apache.org/viewvc?rev=725417&view=rev
Log:
implement timeout on sendfile write as wellimplement timeout on sendfile write as wellimplement timeout on sendfile write as wellimplement timeout on sendfile write as wellimplement timeout on sendfile write as wellimplement timeout on sendfile write as wellimplement timeout on sendfile write as wellimplement timeout on sendfile write as wellimplement timeout on sendfile write as well

Modified:
    tomcat/trunk/java/org/apache/tomcat/util/net/NioChannel.java
    tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java
    tomcat/trunk/java/org/apache/tomcat/util/net/SecureNioChannel.java

Modified: tomcat/trunk/java/org/apache/tomcat/util/net/NioChannel.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/NioChannel.java?rev=725417&r1=725416&r2=725417&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/NioChannel.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/NioChannel.java Wed Dec 10 12:28:19 2008
@@ -199,8 +199,13 @@
         return 0;
     }
     
-    public void flushOutbound() throws IOException {
-        
+    /**
+     * Return true if the buffer wrote data
+     * @return
+     * @throws IOException
+     */
+    public boolean flushOutbound() throws IOException {
+        return false;
     }
     
     public boolean isSendFile() {

Modified: tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java?rev=725417&r1=725416&r2=725417&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java Wed Dec 10 12:28:19 2008
@@ -1577,12 +1577,15 @@
                 WritableByteChannel wc =(WritableByteChannel) ((sc instanceof SecureNioChannel)?sc:sc.getIOChannel());
                 
                 if (sc.getOutboundRemaining()>0) {
-                    sc.flushOutbound();
+                    if (sc.flushOutbound()) {
+                        attachment.access();
+                    }
                 } else {
                     long written = sd.fchannel.transferTo(sd.pos,sd.length,wc);
                     if ( written > 0 ) {
                         sd.pos += written;
                         sd.length -= written;
+                        attachment.access();
                     }
                 }
                 if ( sd.length <= 0 && sc.getOutboundRemaining()<=0) {
@@ -1662,13 +1665,14 @@
                     if ( ka == null ) {
                         cancelledKey(key, SocketStatus.ERROR,false); //we don't support any keys without attachments
                     } else if ( ka.getError() ) {
-                        cancelledKey(key, SocketStatus.ERROR,true);
+                        cancelledKey(key, SocketStatus.ERROR,true);//TODO this is not yet being used
                     } else if (ka.getComet() && ka.getCometNotify() ) {
                         ka.setCometNotify(false);
                         reg(key,ka,0);//avoid multiple calls, this gets reregistered after invokation
                         //if (!processSocket(ka.getChannel(), SocketStatus.OPEN_CALLBACK)) processSocket(ka.getChannel(), SocketStatus.DISCONNECT);
                         if (!processSocket(ka.getChannel(), SocketStatus.OPEN, true)) processSocket(ka.getChannel(), SocketStatus.DISCONNECT, true);
-                    }else if ((ka.interestOps()&SelectionKey.OP_READ) == SelectionKey.OP_READ) {
+                    }else if ((ka.interestOps()&SelectionKey.OP_READ) == SelectionKey.OP_READ ||
+                              (ka.interestOps()&SelectionKey.OP_WRITE) == SelectionKey.OP_WRITE) {
                         //only timeout sockets that we are waiting for a read from
                         long delta = now - ka.getLastAccess();
                         long timeout = (ka.getTimeout()==-1)?((long) socketProperties.getSoTimeout()):(ka.getTimeout());

Modified: tomcat/trunk/java/org/apache/tomcat/util/net/SecureNioChannel.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/SecureNioChannel.java?rev=725417&r1=725416&r2=725417&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/SecureNioChannel.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/SecureNioChannel.java Wed Dec 10 12:28:19 2008
@@ -440,8 +440,11 @@
     }
     
     @Override
-    public void flushOutbound() throws IOException {
+    public boolean flushOutbound() throws IOException {
+        int remaining = netOutBuffer.remaining();
         flush(netOutBuffer);
+        int remaining2= netOutBuffer.remaining();
+        return remaining2 < remaining;
     }
 
     



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