Author: trustin
Date: Mon Mar 26 20:12:33 2007
New Revision: 522721

URL: http://svn.apache.org/viewvc?view=rev&rev=522721
Log:
Fixed issue: DIRMINA-362 (Channel writes being made without OP_WRITE selector 
ready)
* Applied Michael Kearns' patch that fixes unexpected 100% CPU consumption
** Added an if block that performs additional writability check



Modified:
    
mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
    
mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
    
mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java

Modified: 
mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
URL: 
http://svn.apache.org/viewvc/mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java?view=diff&rev=522721&r1=522720&r2=522721
==============================================================================
--- 
mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
 (original)
+++ 
mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
 Mon Mar 26 20:12:33 2007
@@ -398,7 +398,8 @@
                 scheduleFlush( session );
                 break;
             }
-            // skip if channel is already closed
+
+            // Skip if the channel is already closed.
             if( !key.isValid() )
             {
                 continue;
@@ -474,10 +475,13 @@
                 continue;
             }
 
-            int writtenBytes = ch.write( buf.buf() );
-            if( writtenBytes > 0 )
+            if( key.isWritable() )
             {
-                session.increaseWrittenBytes( writtenBytes );
+                int writtenBytes = ch.write( buf.buf() );
+                if( writtenBytes > 0 )
+                {
+                    session.increaseWrittenBytes( writtenBytes );
+                }
             }
 
             if( buf.hasRemaining() )

Modified: 
mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
URL: 
http://svn.apache.org/viewvc/mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java?view=diff&rev=522721&r1=522720&r2=522721
==============================================================================
--- 
mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
 (original)
+++ 
mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
 Mon Mar 26 20:12:33 2007
@@ -354,7 +354,8 @@
                 scheduleFlush( session );
                 break;
             }
-            // skip if channel is already closed
+
+            // Skip if the channel is already closed.
             if( !key.isValid() )
             {
                 continue;
@@ -422,10 +423,13 @@
                 continue;
             }
 
-            int writtenBytes = ch.write( buf.buf() );
-            if( writtenBytes > 0 )
+            if( key.isWritable() )
             {
-                session.increaseWrittenBytes( writtenBytes );
+                int writtenBytes = ch.write( buf.buf() );
+                if( writtenBytes > 0 )
+                {
+                    session.increaseWrittenBytes( writtenBytes );
+                }
             }
 
             if( buf.hasRemaining() )

Modified: 
mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
URL: 
http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java?view=diff&rev=522721&r1=522720&r2=522721
==============================================================================
--- 
mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
 (original)
+++ 
mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
 Mon Mar 26 20:12:33 2007
@@ -396,7 +396,8 @@
                 scheduleFlush( session );
                 break;
             }
-            // skip if channel is already closed
+
+            // Skip if the channel is already closed.
             if( !key.isValid() )
             {
                 continue;
@@ -461,10 +462,13 @@
                 continue;
             }
 
-            int writtenBytes = ch.write( buf.buf() );
-            if( writtenBytes > 0 )
+            if( key.isWritable() )
             {
-                session.increaseWrittenBytes( writtenBytes );
+                int writtenBytes = ch.write( buf.buf() );
+                if( writtenBytes > 0 )
+                {
+                    session.increaseWrittenBytes( writtenBytes );
+                }
             }
 
             if( buf.hasRemaining() )


Reply via email to