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/08/17 14:19:41 UTC
svn commit: r567037 - in
/mina/trunk/core/src/main/java/org/apache/mina/common:
AbstractIoSession.java IoServiceListenerSupport.java IoSession.java
Author: trustin
Date: Fri Aug 17 05:19:36 2007
New Revision: 567037
URL: http://svn.apache.org/viewvc?view=rev&rev=567037
Log:
* Added documentation that explains the equality implementation of IoSession explicitly
* Added final equality methods to AbstractIoSession to prevent any possible mistakes
* Changed IoSessionListenerSupport to use ConcurrentHashSet
Modified:
mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoSession.java
mina/trunk/core/src/main/java/org/apache/mina/common/IoServiceListenerSupport.java
mina/trunk/core/src/main/java/org/apache/mina/common/IoSession.java
Modified: mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoSession.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoSession.java?view=diff&rev=567037&r1=567036&r2=567037
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoSession.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoSession.java Fri Aug 17 05:19:36 2007
@@ -533,6 +533,16 @@
return getRemoteAddress();
}
}
+
+ @Override
+ public final int hashCode() {
+ return System.identityHashCode(this);
+ }
+
+ @Override
+ public final boolean equals(Object o) {
+ return this == o;
+ }
@Override
public String toString() {
Modified: mina/trunk/core/src/main/java/org/apache/mina/common/IoServiceListenerSupport.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/common/IoServiceListenerSupport.java?view=diff&rev=567037&r1=567036&r2=567037
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/common/IoServiceListenerSupport.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/common/IoServiceListenerSupport.java Fri Aug 17 05:19:36 2007
@@ -20,10 +20,11 @@
package org.apache.mina.common;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import java.util.Set;
-import org.apache.mina.util.IdentityHashSet;
+import org.apache.mina.util.ConcurrentHashSet;
/**
* A helper which provides addition and removal of {@link IoServiceListener}s and firing
@@ -46,7 +47,12 @@
/**
* Tracks managed sesssions.
*/
- private final Set<IoSession> managedSessions = new IdentityHashSet<IoSession>();
+ private final Set<IoSession> managedSessions = new ConcurrentHashSet<IoSession>();
+
+ /**
+ * Read only version of {@link #managedSessions}.
+ */
+ private final Set<IoSession> readOnlyManagedSessions = Collections.unmodifiableSet(managedSessions);
private boolean activated;
@@ -79,9 +85,7 @@
}
public Set<IoSession> getManagedSessions() {
- synchronized (managedSessions) {
- return new IdentityHashSet<IoSession>(managedSessions);
- }
+ return readOnlyManagedSessions;
}
/**
@@ -140,11 +144,11 @@
boolean firstSession = false;
synchronized (managedSessions) {
firstSession = managedSessions.isEmpty();
+ }
- // If already registered, ignore.
- if (!managedSessions.add(session)) {
- return;
- }
+ // If already registered, ignore.
+ if (!managedSessions.add(session)) {
+ return;
}
// If the first connector session, fire a virtual service activation event.
@@ -168,13 +172,13 @@
* Calls {@link IoServiceListener#sessionDestroyed(IoSession)} for all registered listeners.
*/
public void fireSessionDestroyed(IoSession session) {
+ // Try to remove the remaining empty session set after removal.
+ if (!managedSessions.remove(session)) {
+ return;
+ }
+
boolean lastSession = false;
synchronized (managedSessions) {
- // Try to remove the remaining empty seession set after removal.
- if (!managedSessions.remove(session)) {
- return;
- }
-
lastSession = managedSessions.isEmpty();
}
@@ -205,20 +209,11 @@
return;
}
- final Object lock = new Object();
- Set<IoSession> sessionsCopy;
- synchronized (managedSessions) {
- sessionsCopy = new IdentityHashSet<IoSession>(managedSessions);
- }
-
- for (IoSession s : sessionsCopy) {
- s.close().addListener(new IoFutureListener() {
- public void operationComplete(IoFuture future) {
- synchronized (lock) {
- lock.notifyAll();
- }
- }
- });
+ Object lock = new Object();
+ IoFutureListener listener = new LockNotifyingListener(lock);
+
+ for (IoSession s : managedSessions) {
+ s.close().addListener(listener);
}
try {
@@ -229,6 +224,20 @@
}
} catch (InterruptedException ie) {
// Ignored
+ }
+ }
+
+ private static class LockNotifyingListener implements IoFutureListener {
+ private final Object lock;
+
+ public LockNotifyingListener(Object lock) {
+ this.lock = lock;
+ }
+
+ public void operationComplete(IoFuture future) {
+ synchronized (lock) {
+ lock.notifyAll();
+ }
}
}
}
Modified: mina/trunk/core/src/main/java/org/apache/mina/common/IoSession.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/common/IoSession.java?view=diff&rev=567037&r1=567036&r2=567037
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/common/IoSession.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/common/IoSession.java Fri Aug 17 05:19:36 2007
@@ -44,6 +44,10 @@
* is executed simultaneously, and therefore you have to make sure the
* {@link IoFilter} implementations you're using are thread-safe, too.
* </p>
+ *
+ * <h3>Equality of Sessions</h3>
+ * {@link #equals(Object)} and {@link #hashCode()} shall not be overriden
+ * to the default behavior that is defined in {@link Object}.
*
* @author The Apache MINA Project (dev@mina.apache.org)
* @version $Rev$, $Date$