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