Author: remm
Date: Thu Jun 29 04:37:30 2006
New Revision: 418016

URL: http://svn.apache.org/viewvc?rev=418016&view=rev
Log:
- Redo the session activity check (which prevents expiring a session if there 
is an extremely
  long request and a short timeout) as optional, and using an atomic integer.

Modified:
    tomcat/tc6.0.x/trunk/java/org/apache/catalina/session/StandardSession.java

Modified: 
tomcat/tc6.0.x/trunk/java/org/apache/catalina/session/StandardSession.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/session/StandardSession.java?rev=418016&r1=418015&r2=418016&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/catalina/session/StandardSession.java 
(original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/session/StandardSession.java 
Thu Jun 29 04:37:30 2006
@@ -34,6 +34,7 @@
 import java.util.Hashtable;
 import java.util.Iterator;
 import java.util.Map;
+import java.util.concurrent.atomic.AtomicInteger;
 
 import javax.servlet.ServletContext;
 import javax.servlet.http.HttpSession;
@@ -81,6 +82,10 @@
     implements HttpSession, Session, Serializable {
 
 
+    protected static final boolean ACTIVITY_CHECK = 
+        
Boolean.valueOf(System.getProperty("org.apache.catalina.session.StandardSession.ACTIVITY_CHECK",
 "false")).booleanValue();
+
+
     // ----------------------------------------------------------- Constructors
 
 
@@ -272,9 +277,9 @@
     /**
      * The access count for this session.
      */
-    protected transient int accessCount = 0;
-
+    protected transient AtomicInteger accessCount = null;
 
+    
     // ----------------------------------------------------- Session Properties
 
 
@@ -568,7 +573,7 @@
             return false;
         }
 
-        if (accessCount > 0) {
+        if (ACTIVITY_CHECK && accessCount.get() > 0) {
             return true;
         }
 
@@ -606,7 +611,10 @@
 
         this.lastAccessedTime = this.thisAccessedTime;
         this.thisAccessedTime = System.currentTimeMillis();
-        accessCount++;
+        
+        if (ACTIVITY_CHECK) {
+            accessCount.incrementAndGet();
+        }
 
     }
 
@@ -617,7 +625,10 @@
     public void endAccess() {
 
         isNew = false;
-        accessCount--;
+
+        if (ACTIVITY_CHECK) {
+            accessCount.decrementAndGet();
+        }
 
     }
 
@@ -697,7 +708,7 @@
                     }
                 }
             }
-            accessCount = 0;
+            accessCount = null;
             setValid(false);
 
             /*
@@ -775,6 +786,11 @@
      */
     public void activate() {
 
+        // Initialize access count
+        if (ACTIVITY_CHECK) {
+            accessCount = new AtomicInteger();
+        }
+        
         // Notify interested session event listeners
         fireSessionEvent(Session.SESSION_ACTIVATED_EVENT, null);
 
@@ -837,7 +853,7 @@
         id = null;
         lastAccessedTime = 0L;
         maxInactiveInterval = -1;
-        accessCount = 0;
+        accessCount = null;
         notes.clear();
         setPrincipal(null);
         isNew = false;



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to