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 2008/03/12 05:17:44 UTC
svn commit: r636193 - in /mina/branches:
1.0/core/src/main/java/org/apache/mina/common/support/IoServiceListenerSupport.java
1.1/core/src/main/java/org/apache/mina/common/support/IoServiceListenerSupport.java
Author: trustin
Date: Tue Mar 11 21:17:43 2008
New Revision: 636193
URL: http://svn.apache.org/viewvc?rev=636193&view=rev
Log:
Fixed issue: DIRMINA-549 - Inconsistency in managed session set under heavy load* fixed by moving more code under synchronized block
Modified:
mina/branches/1.0/core/src/main/java/org/apache/mina/common/support/IoServiceListenerSupport.java
mina/branches/1.1/core/src/main/java/org/apache/mina/common/support/IoServiceListenerSupport.java
Modified: mina/branches/1.0/core/src/main/java/org/apache/mina/common/support/IoServiceListenerSupport.java
URL: http://svn.apache.org/viewvc/mina/branches/1.0/core/src/main/java/org/apache/mina/common/support/IoServiceListenerSupport.java?rev=636193&r1=636192&r2=636193&view=diff
==============================================================================
--- mina/branches/1.0/core/src/main/java/org/apache/mina/common/support/IoServiceListenerSupport.java (original)
+++ mina/branches/1.0/core/src/main/java/org/apache/mina/common/support/IoServiceListenerSupport.java Tue Mar 11 21:17:43 2008
@@ -182,12 +182,12 @@
managedSessions.put(serviceAddress, sessions);
firstSession = true;
}
- }
- // If already registered, ignore.
- synchronized (sessions) {
- if (!sessions.add(session)) {
- return;
+ // If already registered, ignore.
+ synchronized (sessions) {
+ if (!sessions.add(session)) {
+ return;
+ }
}
}
@@ -230,7 +230,7 @@
return;
}
- // Try to remove the remaining empty seession set after removal.
+ // Try to remove the remaining empty session set after removal.
synchronized (sessions) {
sessions.remove(session);
if (sessions.isEmpty()) {
Modified: mina/branches/1.1/core/src/main/java/org/apache/mina/common/support/IoServiceListenerSupport.java
URL: http://svn.apache.org/viewvc/mina/branches/1.1/core/src/main/java/org/apache/mina/common/support/IoServiceListenerSupport.java?rev=636193&r1=636192&r2=636193&view=diff
==============================================================================
--- mina/branches/1.1/core/src/main/java/org/apache/mina/common/support/IoServiceListenerSupport.java (original)
+++ mina/branches/1.1/core/src/main/java/org/apache/mina/common/support/IoServiceListenerSupport.java Tue Mar 11 21:17:43 2008
@@ -156,22 +156,24 @@
public void fireSessionCreated(IoSession session) {
SocketAddress serviceAddress = session.getServiceAddress();
- // Get the session set.
- Set<IoSession> s = new IdentityHashSet<IoSession>();
- Set<IoSession> sessions = managedSessions.putIfAbsent(serviceAddress,
- Collections.synchronizedSet(s));
boolean firstSession;
-
- if (null == sessions) {
- sessions = s;
- firstSession = true;
- } else {
- firstSession = false;
- }
-
- // If already registered, ignore.
- if (!sessions.add(session)) {
- return;
+ Set<IoSession> s = new IdentityHashSet<IoSession>();
+ synchronized (managedSessions) {
+ // Get the session set.
+ Set<IoSession> sessions = managedSessions.putIfAbsent(serviceAddress,
+ Collections.synchronizedSet(s));
+
+ if (null == sessions) {
+ sessions = s;
+ firstSession = true;
+ } else {
+ firstSession = false;
+ }
+
+ // If already registered, ignore.
+ if (!sessions.add(session)) {
+ return;
+ }
}
// If the first connector session, fire a virtual service activation event.
@@ -201,20 +203,21 @@
public void fireSessionDestroyed(IoSession session) {
SocketAddress serviceAddress = session.getServiceAddress();
- // Get the session set.
- Set<IoSession> sessions = managedSessions.get(serviceAddress);
- // Ignore if unknown.
- if (sessions == null) {
- return;
- }
-
- sessions.remove(session);
-
boolean lastSession = false;
-
- // Try to remove the remaining empty session set after removal.
- if (sessions.isEmpty()) {
- lastSession = managedSessions.remove(serviceAddress, sessions);
+ synchronized (managedSessions) {
+ // Get the session set.
+ Set<IoSession> sessions = managedSessions.get(serviceAddress);
+ // Ignore if unknown.
+ if (sessions == null) {
+ return;
+ }
+
+ sessions.remove(session);
+
+ // Try to remove the remaining empty session set after removal.
+ if (sessions.isEmpty()) {
+ lastSession = managedSessions.remove(serviceAddress, sessions);
+ }
}
// Fire session events.