Author: markt
Date: Wed Mar 24 12:38:23 2010
New Revision: 927037

URL: http://svn.apache.org/viewvc?rev=927037&view=rev
Log:
Simpler fix for https://issues.apache.org/bugzilla/show_bug.cgi?id=48790 based 
on a patch by kkolinko
Make maxActive thread safe. Probably unnecessary but technically a bug.

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=927037&r1=927036&r2=927037&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/ha/session/DeltaManager.java 
(original)
+++ tomcat/trunk/java/org/apache/catalina/ha/session/DeltaManager.java Wed Mar 
24 12:38:23 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=927037&r1=927036&r2=927037&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/session/ManagerBase.java (original)
+++ tomcat/trunk/java/org/apache/catalina/session/ManagerBase.java Wed Mar 24 
12:38:23 2010
@@ -183,7 +183,9 @@ public abstract class ManagerBase extend
     // Number of sessions created by this manager
     protected int sessionCounter=0;
 
-    protected int maxActive=0;
+    protected volatile int maxActive=0;
+
+    private final Object maxActiveUpdateLock = new Object();
 
     // number of duplicated session ids - anything >0 means we have problems
     protected int duplicates=0;
@@ -765,7 +767,11 @@ public abstract class ManagerBase extend
         sessions.put(session.getIdInternal(), session);
         int size = sessions.size();
         if( size > maxActive ) {
-            maxActive = size;
+            synchronized(maxActiveUpdateLock) {
+                if( size > maxActive ) {
+                    maxActive = size;
+                }
+            }
         }
     }
 
@@ -1081,7 +1087,9 @@ public abstract class ManagerBase extend
 
 
     public void setMaxActive(int maxActive) {
-        this.maxActive = maxActive;
+        synchronized (maxActiveUpdateLock) {
+            this.maxActive = maxActive;
+        }
     }
 
 



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to