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