Author: trustin
Date: Wed Jul 11 00:44:34 2007
New Revision: 555195

URL: http://svn.apache.org/viewvc?view=rev&rev=555195
Log:
Optimized SocketFilterChain and SocketIoProcessor to call selector.wakeup() as 
less as possible

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

Modified: 
mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketFilterChain.java
URL: 
http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketFilterChain.java?view=diff&rev=555195&r1=555194&r2=555195
==============================================================================
--- 
mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketFilterChain.java
 (original)
+++ 
mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/SocketFilterChain.java
 Wed Jul 11 00:44:34 2007
@@ -49,15 +49,20 @@
         // SocketIoProcessor.doFlush() will reset it after write is finished
         // because the buffer will be passed with messageSent event. 
         ( ( ByteBuffer ) writeRequest.getMessage() ).mark();
+        
+        int writeRequestQueueSize;
         synchronized( writeRequestQueue )
         {
             writeRequestQueue.offer( writeRequest );
-            if( writeRequestQueue.size() == 1 && 
session.getTrafficMask().isWritable() )
-            {
-                // Notify SocketIoProcessor only when writeRequestQueue was 
empty.
-                s.getIoProcessor().flush( s );
-            }
+            writeRequestQueueSize = writeRequestQueue.size();
         }
+        
+        if( writeRequestQueueSize == 1 && 
session.getTrafficMask().isWritable() )
+        {
+            // Notify SocketIoProcessor only when writeRequestQueue was empty.
+            s.getIoProcessor().flush( s );
+        }
+
     }
 
     @Override

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=555195&r1=555194&r2=555195
==============================================================================
--- 
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
 Wed Jul 11 00:44:34 2007
@@ -109,10 +109,13 @@
     }
 
     void flush(SocketSessionImpl session) {
+        boolean needsWakeup = flushingSessions.isEmpty();
         scheduleFlush(session);
-        Selector selector = this.selector;
-        if (selector != null) {
-            selector.wakeup();
+        if (needsWakeup) {
+            Selector selector = this.selector;
+            if (selector != null) {
+                selector.wakeup();
+            }
         }
     }
 


Reply via email to