From 1c6a706ef040c5de954b0bdc9670a3bdb461426e Mon Sep 17 00:00:00 2001 From: remm Date: Thu, 29 Jun 2006 11:37:30 +0000 Subject: [PATCH] - 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. git-svn-id: https://svn.apache.org/repos/asf/tomcat/tc6.0.x/trunk@418016 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/catalina/session/StandardSession.java | 30 +++++++++++++++++----- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/java/org/apache/catalina/session/StandardSession.java b/java/org/apache/catalina/session/StandardSession.java index da84a8d6b..66de704f7 100644 --- a/java/org/apache/catalina/session/StandardSession.java +++ b/java/org/apache/catalina/session/StandardSession.java @@ -34,6 +34,7 @@ import java.util.HashMap; 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 @@ public class StandardSession 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 @@ public class StandardSession /** * The access count for this session. */ - protected transient int accessCount = 0; - + protected transient AtomicInteger accessCount = null; + // ----------------------------------------------------- Session Properties @@ -568,7 +573,7 @@ public class StandardSession return false; } - if (accessCount > 0) { + if (ACTIVITY_CHECK && accessCount.get() > 0) { return true; } @@ -606,7 +611,10 @@ public class StandardSession this.lastAccessedTime = this.thisAccessedTime; this.thisAccessedTime = System.currentTimeMillis(); - accessCount++; + + if (ACTIVITY_CHECK) { + accessCount.incrementAndGet(); + } } @@ -617,7 +625,10 @@ public class StandardSession public void endAccess() { isNew = false; - accessCount--; + + if (ACTIVITY_CHECK) { + accessCount.decrementAndGet(); + } } @@ -697,7 +708,7 @@ public class StandardSession } } } - accessCount = 0; + accessCount = null; setValid(false); /* @@ -775,6 +786,11 @@ public class StandardSession */ 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 @@ public class StandardSession id = null; lastAccessedTime = 0L; maxInactiveInterval = -1; - accessCount = 0; + accessCount = null; notes.clear(); setPrincipal(null); isNew = false; -- 2.11.0