- Redo the session activity check (which prevents expiring a session if there is...
authorremm <remm@13f79535-47bb-0310-9956-ffa450edef68>
Thu, 29 Jun 2006 11:37:30 +0000 (11:37 +0000)
committerremm <remm@13f79535-47bb-0310-9956-ffa450edef68>
Thu, 29 Jun 2006 11:37:30 +0000 (11:37 +0000)
  long request and a short timeout) as optional, and using an atomic integer.

git-svn-id: https://svn.apache.org/repos/asf/tomcat/tc6.0.x/trunk@418016 13f79535-47bb-0310-9956-ffa450edef68

java/org/apache/catalina/session/StandardSession.java

index da84a8d..66de704 100644 (file)
@@ -34,6 +34,7 @@ import java.util.HashMap;
 import java.util.Hashtable;\r
 import java.util.Iterator;\r
 import java.util.Map;\r
+import java.util.concurrent.atomic.AtomicInteger;\r
 \r
 import javax.servlet.ServletContext;\r
 import javax.servlet.http.HttpSession;\r
@@ -81,6 +82,10 @@ public class StandardSession
     implements HttpSession, Session, Serializable {\r
 \r
 \r
+    protected static final boolean ACTIVITY_CHECK = \r
+        Boolean.valueOf(System.getProperty("org.apache.catalina.session.StandardSession.ACTIVITY_CHECK", "false")).booleanValue();\r
+\r
+\r
     // ----------------------------------------------------------- Constructors\r
 \r
 \r
@@ -272,9 +277,9 @@ public class StandardSession
     /**\r
      * The access count for this session.\r
      */\r
-    protected transient int accessCount = 0;\r
-\r
+    protected transient AtomicInteger accessCount = null;\r
 \r
+    \r
     // ----------------------------------------------------- Session Properties\r
 \r
 \r
@@ -568,7 +573,7 @@ public class StandardSession
             return false;\r
         }\r
 \r
-        if (accessCount > 0) {\r
+        if (ACTIVITY_CHECK && accessCount.get() > 0) {\r
             return true;\r
         }\r
 \r
@@ -606,7 +611,10 @@ public class StandardSession
 \r
         this.lastAccessedTime = this.thisAccessedTime;\r
         this.thisAccessedTime = System.currentTimeMillis();\r
-        accessCount++;\r
+        \r
+        if (ACTIVITY_CHECK) {\r
+            accessCount.incrementAndGet();\r
+        }\r
 \r
     }\r
 \r
@@ -617,7 +625,10 @@ public class StandardSession
     public void endAccess() {\r
 \r
         isNew = false;\r
-        accessCount--;\r
+\r
+        if (ACTIVITY_CHECK) {\r
+            accessCount.decrementAndGet();\r
+        }\r
 \r
     }\r
 \r
@@ -697,7 +708,7 @@ public class StandardSession
                     }\r
                 }\r
             }\r
-            accessCount = 0;\r
+            accessCount = null;\r
             setValid(false);\r
 \r
             /*\r
@@ -775,6 +786,11 @@ public class StandardSession
      */\r
     public void activate() {\r
 \r
+        // Initialize access count\r
+        if (ACTIVITY_CHECK) {\r
+            accessCount = new AtomicInteger();\r
+        }\r
+        \r
         // Notify interested session event listeners\r
         fireSessionEvent(Session.SESSION_ACTIVATED_EVENT, null);\r
 \r
@@ -837,7 +853,7 @@ public class StandardSession
         id = null;\r
         lastAccessedTime = 0L;\r
         maxInactiveInterval = -1;\r
-        accessCount = 0;\r
+        accessCount = null;\r
         notes.clear();\r
         setPrincipal(null);\r
         isNew = false;\r