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;