You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by el...@apache.org on 2009/03/09 17:53:13 UTC

svn commit: r751744 - in /mina/trunk: core/src/main/java/org/apache/mina/core/polling/ core/src/main/java/org/apache/mina/filter/codec/demux/ core/src/main/java/org/apache/mina/transport/socket/nio/ transport-apr/src/main/java/org/apache/mina/transport...

Author: elecharny
Date: Mon Mar  9 16:53:13 2009
New Revision: 751744

URL: http://svn.apache.org/viewvc?rev=751744&view=rev
Log:
o Added a constant (SELECT_TIMEOU° to replace the magic numbers used in the Processor
o The select(int) is now a select(long), as the Selector.select() method uses a long, not an int.
o Minor refactoring

Modified:
    mina/trunk/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoProcessor.java
    mina/trunk/core/src/main/java/org/apache/mina/filter/codec/demux/DemuxingProtocolDecoder.java
    mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioProcessor.java
    mina/trunk/transport-apr/src/main/java/org/apache/mina/transport/socket/apr/AprIoProcessor.java

Modified: mina/trunk/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoProcessor.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoProcessor.java?rev=751744&r1=751743&r2=751744&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoProcessor.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoProcessor.java Mon Mar  9 16:53:13 2009
@@ -62,6 +62,9 @@
      * It improves memory utilization and write throughput significantly.
      */
     private static final int WRITE_SPIN_COUNT = 256;
+    
+    /** A timeout used for the select, as we need to get out to deal with idle sessions */
+    private static final long SELECT_TIMEOUT = 1000L;
 
     /** A map containing the last Thread ID for each class */
     private static final Map<Class<?>, AtomicInteger> threadIds = 
@@ -183,7 +186,7 @@
      * @return The number of session ready for read or for write
      * @throws Exception if some low level IO error occurs
      */
-    protected abstract int select(int timeout) throws Exception;
+    protected abstract int select(long timeout) throws Exception;
     
     /**
      * poll those sessions forever
@@ -623,7 +626,7 @@
 
     private void notifyIdleSessions(long currentTime) throws Exception {
         // process idle sessions
-        if (currentTime - lastIdleCheckTime >= 1000) {
+        if (currentTime - lastIdleCheckTime >= SELECT_TIMEOUT) {
             lastIdleCheckTime = currentTime;
             AbstractIoSession.notifyIdleness(allSessions(), currentTime);
         }
@@ -874,8 +877,11 @@
 
             for (;;) {
                 try {
-                    // TODO: Why do we use a timeout here ??? 
-                    int selected = select(1000);
+                    // This select has a timeout so that we can manage
+                    // dile session when we get out of the select every
+                    // second. (note : this is a hack to avoid creating
+                    // a dedicated thread).
+                    int selected = select(SELECT_TIMEOUT);
 
                     nSessions += handleNewSessions();
                     updateTrafficMask();

Modified: mina/trunk/core/src/main/java/org/apache/mina/filter/codec/demux/DemuxingProtocolDecoder.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/filter/codec/demux/DemuxingProtocolDecoder.java?rev=751744&r1=751743&r2=751744&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/filter/codec/demux/DemuxingProtocolDecoder.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/filter/codec/demux/DemuxingProtocolDecoder.java Mon Mar  9 16:53:13 2009
@@ -125,15 +125,18 @@
     protected boolean doDecode(IoSession session, IoBuffer in,
             ProtocolDecoderOutput out) throws Exception {
         State state = getState(session);
+        
         if (state.currentDecoder == null) {
             MessageDecoder[] decoders = state.decoders;
             int undecodables = 0;
+        
             for (int i = decoders.length - 1; i >= 0; i--) {
                 MessageDecoder decoder = decoders[i];
                 int limit = in.limit();
                 int pos = in.position();
 
                 MessageDecoderResult result;
+                
                 try {
                     result = decoder.decodable(session, in);
                 } finally {
@@ -209,13 +212,16 @@
     
     private State getState(IoSession session) throws Exception {
         State state = (State) session.getAttribute(STATE);
+        
         if (state == null) {
             state = new State();
             State oldState = (State) session.setAttributeIfAbsent(STATE, state);
+            
             if (oldState != null) {
                 state = oldState;
             }
         }
+        
         return state;
     }
     

Modified: mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioProcessor.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioProcessor.java?rev=751744&r1=751743&r2=751744&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioProcessor.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioProcessor.java Mon Mar  9 16:53:13 2009
@@ -65,7 +65,7 @@
     }
 
     @Override
-    protected int select(int timeout) throws Exception {
+    protected int select(long timeout) throws Exception {
         return selector.select(timeout);
     }
 

Modified: mina/trunk/transport-apr/src/main/java/org/apache/mina/transport/socket/apr/AprIoProcessor.java
URL: http://svn.apache.org/viewvc/mina/trunk/transport-apr/src/main/java/org/apache/mina/transport/socket/apr/AprIoProcessor.java?rev=751744&r1=751743&r2=751744&view=diff
==============================================================================
--- mina/trunk/transport-apr/src/main/java/org/apache/mina/transport/socket/apr/AprIoProcessor.java (original)
+++ mina/trunk/transport-apr/src/main/java/org/apache/mina/transport/socket/apr/AprIoProcessor.java Mon Mar  9 16:53:13 2009
@@ -130,7 +130,7 @@
     }
 
  	@Override
-    protected int select(int timeout) throws Exception {
+    protected int select(long timeout) throws Exception {
         int rv = Poll.poll(pollset, 1000 * timeout, polledSockets, false);
         if (rv <= 0) {
             if (rv != -120001) {