You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by tr...@apache.org on 2007/07/06 13:43:05 UTC
svn commit: r553846 -
/mina/trunk/core/src/main/java/org/apache/mina/common/support/BaseIoSession.java
Author: trustin
Date: Fri Jul 6 04:43:04 2007
New Revision: 553846
URL: http://svn.apache.org/viewvc?view=rev&rev=553846
Log:
Caught up the changes in branches/1.1
Modified:
mina/trunk/core/src/main/java/org/apache/mina/common/support/BaseIoSession.java
Modified: mina/trunk/core/src/main/java/org/apache/mina/common/support/BaseIoSession.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/common/support/BaseIoSession.java?view=diff&rev=553846&r1=553845&r2=553846
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/common/support/BaseIoSession.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/common/support/BaseIoSession.java Fri Jul 6 04:43:04 2007
@@ -20,7 +20,10 @@
package org.apache.mina.common.support;
import java.net.SocketAddress;
+import java.util.Collections;
+import java.util.HashMap;
import java.util.HashSet;
+import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
@@ -45,7 +48,8 @@
public abstract class BaseIoSession implements IoSession
{
private final Object lock = new Object();
- private final ConcurrentMap<String,Object> attributes = new ConcurrentHashMap<String, Object>( );
+ private final Map<String,Object> attributes =
+ Collections.synchronizedMap(new HashMap<String, Object>(8));
private final long creationTime;
/**
@@ -201,7 +205,7 @@
return attributes.get(key);
}
- Object answer = attributes.putIfAbsent(key, defaultValue);
+ Object answer = attributes.get(key);
if (answer == null) {
return defaultValue;
} else {
@@ -240,7 +244,14 @@
return null;
}
- return attributes.putIfAbsent( key, value );
+ Object oldValue;
+ synchronized (attributes) {
+ oldValue = attributes.get(key);
+ if (oldValue == null) {
+ attributes.put(key, value);
+ }
+ }
+ return oldValue;
}
public Object removeAttribute( String key )
@@ -261,21 +272,42 @@
return false;
}
- return attributes.remove(key, value);
+ synchronized (attributes) {
+ if (value.equals(attributes.get(key))) {
+ attributes.remove(key);
+ return true;
+ }
+ }
+
+ return false;
}
public boolean replaceAttribute(String key, Object oldValue, Object newValue) {
- return attributes.replace(key, oldValue, newValue);
+ synchronized (attributes) {
+ Object actualOldValue = attributes.get(key);
+ if (actualOldValue == null) {
+ return false;
+ }
+
+ if (actualOldValue.equals(oldValue)) {
+ attributes.put(key, newValue);
+ return true;
+ } else {
+ return false;
+ }
+ }
}
public boolean containsAttribute( String key )
{
- return getAttribute( key ) != null;
+ return attributes.containsKey(key);
}
public Set<String> getAttributeKeys()
{
- return new HashSet<String>( attributes.keySet() );
+ synchronized (attributes) {
+ return new HashSet<String>( attributes.keySet() );
+ }
}
public int getIdleTime( IdleStatus status )