[jboss-cvs] JBossAS SVN: r71985 - trunk/tomcat/src/main/org/jboss/web/tomcat/service/session.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Apr 10 19:39:34 EDT 2008


Author: bstansberry at jboss.com
Date: 2008-04-10 19:39:34 -0400 (Thu, 10 Apr 2008)
New Revision: 71985

Modified:
   trunk/tomcat/src/main/org/jboss/web/tomcat/service/session/JBossManager.java
Log:
Prevent conflicts between manager stop and background processing work

Modified: trunk/tomcat/src/main/org/jboss/web/tomcat/service/session/JBossManager.java
===================================================================
--- trunk/tomcat/src/main/org/jboss/web/tomcat/service/session/JBossManager.java	2008-04-10 23:34:07 UTC (rev 71984)
+++ trunk/tomcat/src/main/org/jboss/web/tomcat/service/session/JBossManager.java	2008-04-10 23:39:34 UTC (rev 71985)
@@ -29,6 +29,7 @@
 import java.util.Iterator;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.atomic.AtomicBoolean;
 
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
@@ -112,6 +113,11 @@
     */
    protected boolean started_ = false;
    /**
+    * Are we allowing backgroundProcess() to execute? We use an object
+    * so stop() can lock on it to wait for
+    */
+   protected AtomicBoolean backgroundProcessAllowed = new AtomicBoolean();
+   /**
     * The objectname this Manager is associated with
     */
    protected ObjectName objectName_;
@@ -619,6 +625,12 @@
     */
    public void stop() throws LifecycleException
    {
+      // Block for any ongoing backgroundProcess, then disable
+      synchronized (backgroundProcessAllowed)
+      {
+         backgroundProcessAllowed.set(false);
+      }
+      
       resetStats();
       stopManager();
    }
@@ -640,8 +652,10 @@
 
       // Validate and update our current component state
       if (started_)
-         throw new LifecycleException
-            ("JBossManager alreadyStarted");
+         throw new LifecycleException("JBossManager alreadyStarted");
+      
+      backgroundProcessAllowed.set(true);
+      
       lifecycle_.fireLifecycleEvent(START_EVENT, null);
       started_ = true;
 
@@ -872,13 +886,19 @@
    {
       // Called from Catalina StandardEngine for every 60 seconds.
       
-      long start = System.currentTimeMillis();
-      
-      processExpires();
-      
-      long elapsed = System.currentTimeMillis() - start;
-      
-      processingTime_ += elapsed;
+      synchronized (backgroundProcessAllowed)
+      {
+         if (backgroundProcessAllowed.get())
+         {
+            long start = System.currentTimeMillis();
+            
+            processExpires();
+            
+            long elapsed = System.currentTimeMillis() - start;
+            
+            processingTime_ += elapsed;
+         }
+      }
    }
 
    /**




More information about the jboss-cvs-commits mailing list