Author: elecharny
Date: Tue Feb 16 14:58:25 2010
New Revision: 910545

URL: http://svn.apache.org/viewvc?rev=910545&view=rev
Log:
- Replaced the HashMap by ConcurrentHashmap
- Removed a useless IoProcessor counter, used the session counter instead to 
loop over the IoProcessor pool.

Modified:
    
mina/trunk/core/src/main/java/org/apache/mina/core/filterchain/DefaultIoFilterChain.java
    
mina/trunk/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoAcceptor.java
    
mina/trunk/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoProcessor.java
    
mina/trunk/core/src/main/java/org/apache/mina/core/service/SimpleIoProcessorPool.java
    
mina/trunk/core/src/main/java/org/apache/mina/core/session/DefaultIoSessionDataStructureFactory.java
    
mina/trunk/core/src/main/java/org/apache/mina/handler/chain/IoHandlerChain.java

Modified: 
mina/trunk/core/src/main/java/org/apache/mina/core/filterchain/DefaultIoFilterChain.java
URL: 
http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/core/filterchain/DefaultIoFilterChain.java?rev=910545&r1=910544&r2=910545&view=diff
==============================================================================
--- 
mina/trunk/core/src/main/java/org/apache/mina/core/filterchain/DefaultIoFilterChain.java
 (original)
+++ 
mina/trunk/core/src/main/java/org/apache/mina/core/filterchain/DefaultIoFilterChain.java
 Tue Feb 16 14:58:25 2010
@@ -20,9 +20,9 @@
 package org.apache.mina.core.filterchain;
 
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 
 import org.apache.mina.core.buffer.IoBuffer;
 import org.apache.mina.core.filterchain.IoFilter.NextFilter;
@@ -56,7 +56,7 @@
     /** The associated session */
     private final AbstractIoSession session;
 
-    private final Map<String, Entry> name2entry = new HashMap<String, Entry>();
+    private final Map<String, Entry> name2entry = new 
ConcurrentHashMap<String, Entry>();
 
     /** The chain head */
     private final EntryImpl head;

Modified: 
mina/trunk/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoAcceptor.java
URL: 
http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoAcceptor.java?rev=910545&r1=910544&r2=910545&view=diff
==============================================================================
--- 
mina/trunk/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoAcceptor.java
 (original)
+++ 
mina/trunk/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoAcceptor.java
 Tue Feb 16 14:58:25 2010
@@ -28,6 +28,7 @@
 import java.util.Map;
 import java.util.Queue;
 import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentLinkedQueue;
 import java.util.concurrent.Executor;
 import java.util.concurrent.Executors;
@@ -511,7 +512,7 @@
             // We create a temporary map to store the bound handles,
             // as we may have to remove them all if there is an exception
             // during the sockets opening.
-            Map<SocketAddress, H> newHandles = new HashMap<SocketAddress, H>();
+            Map<SocketAddress, H> newHandles = new 
ConcurrentHashMap<SocketAddress, H>();
             List<SocketAddress> localAddresses = future.getLocalAddresses();
 
             try {

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=910545&r1=910544&r2=910545&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
 Tue Feb 16 14:58:25 2010
@@ -22,11 +22,11 @@
 import java.io.IOException;
 import java.net.PortUnreachableException;
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Queue;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentLinkedQueue;
 import java.util.concurrent.Executor;
 import java.util.concurrent.atomic.AtomicBoolean;
@@ -81,7 +81,7 @@
     private static final long SELECT_TIMEOUT = 1000L;
 
     /** A map containing the last Thread ID for each class */
-    private static final Map<Class<?>, AtomicInteger> threadIds = new 
HashMap<Class<?>, AtomicInteger>();
+    private static final Map<Class<?>, AtomicInteger> threadIds = new 
ConcurrentHashMap<Class<?>, AtomicInteger>();
 
     /** A lock used to protect the processor creation */
     private final Object lock = new Object();

Modified: 
mina/trunk/core/src/main/java/org/apache/mina/core/service/SimpleIoProcessorPool.java
URL: 
http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/core/service/SimpleIoProcessorPool.java?rev=910545&r1=910544&r2=910545&view=diff
==============================================================================
--- 
mina/trunk/core/src/main/java/org/apache/mina/core/service/SimpleIoProcessorPool.java
 (original)
+++ 
mina/trunk/core/src/main/java/org/apache/mina/core/service/SimpleIoProcessorPool.java
 Tue Feb 16 14:58:25 2010
@@ -23,7 +23,6 @@
 import java.util.concurrent.Executor;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
-import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.mina.core.RuntimeIoException;
 import org.apache.mina.core.session.AbstractIoSession;
@@ -87,9 +86,6 @@
     /** The pool table */
     private final IoProcessor<T>[] pool;
 
-    /** A protected counter used to loop on the pool when selecting a new one 
*/
-    private final AtomicInteger processorDistributor = new AtomicInteger();
-
     /** The contained  which is passed to the IoProcessor when they are 
created */
     private final Executor executor;
 
@@ -325,7 +321,7 @@
         IoProcessor<T> processor = (IoProcessor<T>) 
session.getAttribute(PROCESSOR);
         
         if (processor == null) {
-            processor = nextProcessor();
+            processor = nextProcessor(session);
             session.setAttributeIfAbsent(PROCESSOR, processor);
         }
 
@@ -335,12 +331,12 @@
     /**
      * Get a new Processor in the pool, using a round-robin algorithm.
      */
-    private IoProcessor<T> nextProcessor() {
+    private IoProcessor<T> nextProcessor(T session) {
         if (disposed) {
             throw new IllegalStateException(
                     "A disposed processor cannot be accessed.");
         }
         
-        return pool[Math.abs(processorDistributor.getAndIncrement()) % 
pool.length];
+        return pool[Math.abs((int)session.getId()) % pool.length];
     }
 }

Modified: 
mina/trunk/core/src/main/java/org/apache/mina/core/session/DefaultIoSessionDataStructureFactory.java
URL: 
http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/core/session/DefaultIoSessionDataStructureFactory.java?rev=910545&r1=910544&r2=910545&view=diff
==============================================================================
--- 
mina/trunk/core/src/main/java/org/apache/mina/core/session/DefaultIoSessionDataStructureFactory.java
 (original)
+++ 
mina/trunk/core/src/main/java/org/apache/mina/core/session/DefaultIoSessionDataStructureFactory.java
 Tue Feb 16 14:58:25 2010
@@ -19,12 +19,12 @@
  */
 package org.apache.mina.core.session;
 
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Queue;
 import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentLinkedQueue;
 
 import org.apache.mina.core.write.WriteRequest;
@@ -53,7 +53,7 @@
 
     private static class DefaultIoSessionAttributeMap implements 
IoSessionAttributeMap {
         private final Map<Object, Object> attributes =
-            Collections.synchronizedMap(new HashMap<Object, Object>(4));
+            new ConcurrentHashMap<Object, Object>(4);
 
         /**
          * Default constructor

Modified: 
mina/trunk/core/src/main/java/org/apache/mina/handler/chain/IoHandlerChain.java
URL: 
http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/handler/chain/IoHandlerChain.java?rev=910545&r1=910544&r2=910545&view=diff
==============================================================================
--- 
mina/trunk/core/src/main/java/org/apache/mina/handler/chain/IoHandlerChain.java 
(original)
+++ 
mina/trunk/core/src/main/java/org/apache/mina/handler/chain/IoHandlerChain.java 
Tue Feb 16 14:58:25 2010
@@ -20,10 +20,10 @@
 package org.apache.mina.handler.chain;
 
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 
 import org.apache.mina.core.session.IoSession;
 
@@ -40,7 +40,7 @@
     private final String NEXT_COMMAND = IoHandlerChain.class.getName() + '.'
             + id + ".nextCommand";
 
-    private final Map<String, Entry> name2entry = new HashMap<String, Entry>();
+    private final Map<String, Entry> name2entry = new 
ConcurrentHashMap<String, Entry>();
 
     private final Entry head;
 


Reply via email to