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/11/18 00:36:26 UTC
svn commit: r1036286 -
/tomcat/trunk/java/org/apache/catalina/session/ManagerBase.java
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-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org