You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by jv...@apache.org on 2011/09/21 21:42:12 UTC

svn commit: r1173808 - in /mina/trunk/core/src/main/java/org/apache/mina: session/AbstractIoSession.java transport/tcp/NioSelectorProcessor.java

Author: jvermillard
Date: Wed Sep 21 19:42:11 2011
New Revision: 1173808

URL: http://svn.apache.org/viewvc?rev=1173808&view=rev
Log:
fixing some write starvation

Modified:
    mina/trunk/core/src/main/java/org/apache/mina/session/AbstractIoSession.java
    mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/NioSelectorProcessor.java

Modified: mina/trunk/core/src/main/java/org/apache/mina/session/AbstractIoSession.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/session/AbstractIoSession.java?rev=1173808&r1=1173807&r2=1173808&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/session/AbstractIoSession.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/session/AbstractIoSession.java Wed Sep 21 19:42:11 2011
@@ -79,7 +79,7 @@ public abstract class AbstractIoSession 
     protected SessionState state;
 
     /** is this session registered for being polled for write ready events */
-    AtomicBoolean registeredForWrite = new AtomicBoolean();
+    private AtomicBoolean registeredForWrite = new AtomicBoolean();
 
     /** the queue of pending writes for the session, to be dequeued by the {@link SelectorProcessor} */
     private Queue<WriteRequest> writeQueue = new DefaultWriteQueue();
@@ -242,7 +242,10 @@ public abstract class AbstractIoSession 
         if (!registeredForWrite.getAndSet(true)) {
             writeProcessor.flush(this);
         }
+    }
 
+    public void setNotRegisteredForWrite() {
+        registeredForWrite.set(false);
     }
 
     @Override

Modified: mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/NioSelectorProcessor.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/NioSelectorProcessor.java?rev=1173808&r1=1173807&r2=1173808&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/NioSelectorProcessor.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/NioSelectorProcessor.java Wed Sep 21 19:42:11 2011
@@ -320,6 +320,7 @@ public class NioSelectorProcessor implem
                                 // if the session is no more interested in writing, we need
                                 // to stop listening for OP_WRITE events
                                 if (queue.isEmpty()) {
+                                    session.setNotRegisteredForWrite();
                                     // a key registered for read ? (because we can have a
                                     // Selector for reads and another for the writes
                                     SelectionKey readKey = sessionReadKey.get(session);