Author: trustin
Date: Mon Mar 19 18:36:48 2007
New Revision: 520209
URL: http://svn.apache.org/viewvc?view=rev&rev=520209
Log:
Fixed issue: DIRMINA-357 (ConcurrentHashMap.put(key, null) throws an NPE
effects BaseIOSession attachments/attributes)
* setAttribute() redirects the call to removeAttribute() if the specified key
is null.
* Merged the changes in 1.1 to trunk
Modified:
mina/branches/1.1/core/src/main/java/org/apache/mina/common/support/BaseIoSession.java
mina/trunk/core/src/main/java/org/apache/mina/common/support/BaseIoSession.java
Modified:
mina/branches/1.1/core/src/main/java/org/apache/mina/common/support/BaseIoSession.java
URL:
http://svn.apache.org/viewvc/mina/branches/1.1/core/src/main/java/org/apache/mina/common/support/BaseIoSession.java?view=diff&rev=520209&r1=520208&r2=520209
==============================================================================
---
mina/branches/1.1/core/src/main/java/org/apache/mina/common/support/BaseIoSession.java
(original)
+++
mina/branches/1.1/core/src/main/java/org/apache/mina/common/support/BaseIoSession.java
Mon Mar 19 18:36:48 2007
@@ -181,7 +181,14 @@
public Object setAttribute( String key, Object value )
{
- return attributes.put( key, value );
+ if( value == null )
+ {
+ return removeAttribute( key );
+ }
+ else
+ {
+ return attributes.put( key, value );
+ }
}
public Object setAttribute( String key )
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=520209&r1=520208&r2=520209
==============================================================================
---
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
Mon Mar 19 18:36:48 2007
@@ -20,10 +20,10 @@
package org.apache.mina.common.support;
import java.net.SocketAddress;
-import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
import org.apache.mina.common.CloseFuture;
import org.apache.mina.common.IdleStatus;
@@ -42,7 +42,8 @@
*/
public abstract class BaseIoSession implements IoSession
{
- private final Map<String, Object> attributes = new HashMap<String,
Object>();
+ private final Object lock = new Object();
+ private final Map<String,Object> attributes = new
ConcurrentHashMap<String, Object>( );
private final long creationTime;
/**
@@ -89,9 +90,12 @@
return !closeFuture.isClosed();
}
- public synchronized boolean isClosing()
+ public boolean isClosing()
{
- return closing || closeFuture.isClosed();
+ synchronized( lock )
+ {
+ return closing || closeFuture.isClosed();
+ }
}
public CloseFuture getCloseFuture()
@@ -101,7 +105,7 @@
public CloseFuture close()
{
- synchronized( this )
+ synchronized( lock )
{
if( isClosing() )
{
@@ -134,7 +138,7 @@
public WriteFuture write( Object message, SocketAddress remoteAddress )
{
- synchronized( this )
+ synchronized( lock )
{
if( isClosing() || !isConnected() )
{
@@ -163,31 +167,26 @@
public Object getAttachment()
{
- synchronized( attributes )
- {
- return attributes.get( "" );
- }
+ return attributes.get( "" );
}
public Object setAttachment( Object attachment )
{
- synchronized( attributes )
- {
- return attributes.put( "", attachment );
- }
+ return attributes.put( "", attachment );
}
public Object getAttribute( String key )
{
- synchronized( attributes )
- {
- return attributes.get( key );
- }
+ return attributes.get( key );
}
public Object setAttribute( String key, Object value )
{
- synchronized( attributes )
+ if( value == null )
+ {
+ return removeAttribute( key );
+ }
+ else
{
return attributes.put( key, value );
}
@@ -200,10 +199,7 @@
public Object removeAttribute( String key )
{
- synchronized( attributes )
- {
- return attributes.remove( key );
- }
+ return attributes.remove( key );
}
public boolean containsAttribute( String key )
@@ -213,10 +209,7 @@
public Set<String> getAttributeKeys()
{
- synchronized( attributes )
- {
- return new HashSet<String>( attributes.keySet() );
- }
+ return new HashSet<String>( attributes.keySet() );
}
public int getIdleTime( IdleStatus status )