Author: markt Date: Wed Nov 17 23:36:25 2010 New Revision: 1036286 URL: http://svn.apache.org/viewvc?rev=1036286&view=rev Log: Narrow the manager-wide sync
Modified: tomcat/trunk/java/org/apache/catalina/session/ManagerBase.java 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=1036286&r1=1036285&r2=1036286&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/session/ManagerBase.java (original) +++ tomcat/trunk/java/org/apache/catalina/session/ManagerBase.java Wed Nov 17 23:36:25 2010 @@ -179,7 +179,8 @@ public abstract class ManagerBase extend /** * The longest time (in seconds) that an expired session had been alive. */ - protected int sessionMaxAliveTime; + protected volatile int sessionMaxAliveTime; + private final Object sessionMaxAliveTimeUpdateLock = new Object(); /** @@ -1009,10 +1010,8 @@ public abstract class ManagerBase extend if (!session.isValid()) { long timeNow = System.currentTimeMillis(); int timeAlive = (int) ((timeNow - session.getCreationTime())/1000); + updateSessionMaxAliveTime(timeAlive); synchronized (this) { - if (timeAlive > getSessionMaxAliveTime()) { - setSessionMaxAliveTime(timeAlive); - } long numExpired = getExpiredSessions(); numExpired++; setExpiredSessions(numExpired); @@ -1291,18 +1290,37 @@ public abstract class ManagerBase extend /** * Sets the longest time (in seconds) that an expired session had been - * alive. + * alive. Typically used for resetting the current value. * * @param sessionMaxAliveTime Longest time (in seconds) that an expired * session had been alive. */ @Override public void setSessionMaxAliveTime(int sessionMaxAliveTime) { - this.sessionMaxAliveTime = sessionMaxAliveTime; + synchronized (sessionMaxAliveTimeUpdateLock) { + this.sessionMaxAliveTime = sessionMaxAliveTime; + } } /** + * Updates the sessionMaxAliveTime attribute if the candidate value is + * larger than the current value. + * + * @param sessionAliveTime The candidate value (in seconds) for the new + * sessionMaxAliveTime value. + */ + public void updateSessionMaxAliveTime(int sessionAliveTime) { + if (sessionAliveTime > this.sessionMaxAliveTime) { + synchronized (sessionMaxAliveTimeUpdateLock) { + if (sessionAliveTime > this.sessionMaxAliveTime) { + this.sessionMaxAliveTime = sessionAliveTime; + } + } + } + } + + /** * Gets the average time (in seconds) that expired sessions had been * alive. * --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org