You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2010/03/09 23:19:44 UTC
svn commit: r921166 - in /tomcat/trunk/java/org/apache/catalina:
ha/session/DeltaManager.java session/ManagerBase.java
Author: markt
Date: Tue Mar 9 22:19:44 2010
New Revision: 921166
URL: http://svn.apache.org/viewvc?rev=921166&view=rev
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=48790
Make maxActive thread safe. Technically a bug but seems like overkill.
Modified:
tomcat/trunk/java/org/apache/catalina/ha/session/DeltaManager.java
tomcat/trunk/java/org/apache/catalina/session/ManagerBase.java
Modified: tomcat/trunk/java/org/apache/catalina/ha/session/DeltaManager.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ha/session/DeltaManager.java?rev=921166&r1=921165&r2=921166&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/ha/session/DeltaManager.java (original)
+++ tomcat/trunk/java/org/apache/catalina/ha/session/DeltaManager.java Tue Mar 9 22:19:44 2010
@@ -1160,7 +1160,7 @@ public class DeltaManager extends Cluste
rejectedSessions = 0 ;
sessionReplaceCounter = 0 ;
counterNoStateTransfered = 0 ;
- maxActive = getActiveSessions() ;
+ setMaxActive(getActiveSessions());
sessionCounter = getActiveSessions() ;
counterReceive_EVT_ALL_SESSION_DATA = 0;
counterReceive_EVT_GET_ALL_SESSIONS = 0;
Modified: tomcat/trunk/java/org/apache/catalina/session/ManagerBase.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/session/ManagerBase.java?rev=921166&r1=921165&r2=921166&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/session/ManagerBase.java (original)
+++ tomcat/trunk/java/org/apache/catalina/session/ManagerBase.java Tue Mar 9 22:19:44 2010
@@ -37,6 +37,8 @@ import java.util.Iterator;
import java.util.Map;
import java.util.Random;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.locks.ReadWriteLock;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
import javax.management.MBeanRegistration;
import javax.management.MBeanServer;
@@ -184,6 +186,7 @@ public abstract class ManagerBase extend
protected int sessionCounter=0;
protected int maxActive=0;
+ private final ReadWriteLock maxActiveLock = new ReentrantReadWriteLock();
// number of duplicated session ids - anything >0 means we have problems
protected int duplicates=0;
@@ -764,8 +767,17 @@ public abstract class ManagerBase extend
sessions.put(session.getIdInternal(), session);
int size = sessions.size();
- if( size > maxActive ) {
- maxActive = size;
+
+ maxActiveLock.readLock().lock();
+ if (size > maxActive) {
+ maxActiveLock.readLock().unlock();
+ maxActiveLock.writeLock().lock();
+ if (size > maxActive) {
+ maxActive = size;
+ }
+ maxActiveLock.writeLock().unlock();
+ } else {
+ maxActiveLock.readLock().unlock();
}
}
@@ -1076,12 +1088,17 @@ public abstract class ManagerBase extend
* @return The highest number of concurrent active sessions
*/
public int getMaxActive() {
- return maxActive;
+ maxActiveLock.readLock().lock();
+ int result = maxActive;
+ maxActiveLock.readLock().unlock();
+ return result;
}
public void setMaxActive(int maxActive) {
+ maxActiveLock.writeLock().lock();
this.maxActive = maxActive;
+ maxActiveLock.writeLock().unlock();
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org