[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