Author: david.lloyd(a)jboss.com
Date: 2009-11-02 17:18:11 -0500 (Mon, 02 Nov 2009)
New Revision: 5577
Modified:
remoting3/trunk/jboss-remoting/src/main/java/org/jboss/remoting3/CopyOnWriteHashMap.java
Log:
Add missing atomic putAll()
Modified:
remoting3/trunk/jboss-remoting/src/main/java/org/jboss/remoting3/CopyOnWriteHashMap.java
===================================================================
---
remoting3/trunk/jboss-remoting/src/main/java/org/jboss/remoting3/CopyOnWriteHashMap.java 2009-11-02
22:05:58 UTC (rev 5576)
+++
remoting3/trunk/jboss-remoting/src/main/java/org/jboss/remoting3/CopyOnWriteHashMap.java 2009-11-02
22:18:11 UTC (rev 5577)
@@ -201,7 +201,27 @@
return identity ? new IdentityHashMap<K,V>(map) : new HashMap<K,
V>(map);
}
- public void putAll(final Map<? extends K, ? extends V> m) {
+ public void putAll(final Map<? extends K, ? extends V> orig) {
+ if (orig == null) {
+ throw new NullPointerException("map is null");
+ }
+ if (orig.isEmpty()) {
+ return;
+ }
+ synchronized (writeLock) {
+ final Map<K, V> copy = copy(map);
+ for (Entry<? extends K, ? extends V> entry : orig.entrySet()) {
+ copy.put(entry.getKey(), entry.getValue());
+ }
+ if (copy.isEmpty()) {
+ map = emptyMap();
+ } else if (copy.size() == 1) {
+ final Entry<K, V> entry = copy.entrySet().iterator().next();
+ map = singletonMap(entry.getKey(), entry.getValue());
+ } else {
+ map = copy;
+ }
+ }
}
public void clear() {
Show replies by date