From: markt Date: Wed, 24 Mar 2010 12:38:23 +0000 (+0000) Subject: Simpler fix for https://issues.apache.org/bugzilla/show_bug.cgi?id=48790 based on... X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=1a3087407f31577f519956deee4b18e4096d9c4d;p=tomcat7.0 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. git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@927037 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/java/org/apache/catalina/ha/session/DeltaManager.java b/java/org/apache/catalina/ha/session/DeltaManager.java index 513a75068..034710fd2 100644 --- a/java/org/apache/catalina/ha/session/DeltaManager.java +++ b/java/org/apache/catalina/ha/session/DeltaManager.java @@ -1160,7 +1160,7 @@ public class DeltaManager extends ClusterManagerBase{ rejectedSessions = 0 ; sessionReplaceCounter = 0 ; counterNoStateTransfered = 0 ; - maxActive = getActiveSessions() ; + setMaxActive(getActiveSessions()); sessionCounter = getActiveSessions() ; counterReceive_EVT_ALL_SESSION_DATA = 0; counterReceive_EVT_GET_ALL_SESSIONS = 0; diff --git a/java/org/apache/catalina/session/ManagerBase.java b/java/org/apache/catalina/session/ManagerBase.java index c70ea4cf8..aa6c9e8fc 100644 --- a/java/org/apache/catalina/session/ManagerBase.java +++ b/java/org/apache/catalina/session/ManagerBase.java @@ -183,7 +183,9 @@ public abstract class ManagerBase extends LifecycleBase // 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 extends LifecycleBase 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 extends LifecycleBase public void setMaxActive(int maxActive) { - this.maxActive = maxActive; + synchronized (maxActiveUpdateLock) { + this.maxActive = maxActive; + } }