Author: markt Date: Tue Nov 29 21:57:04 2011 New Revision: 1208096 URL: http://svn.apache.org/viewvc?rev=1208096&view=rev Log: Retain thread safety for ContainerBase.realm but don't try and start/stop it multiple times
Modified: tomcat/trunk/java/org/apache/catalina/core/ContainerBase.java tomcat/trunk/java/org/apache/catalina/core/StandardContext.java Modified: tomcat/trunk/java/org/apache/catalina/core/ContainerBase.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/ContainerBase.java?rev=1208096&r1=1208095&r2=1208096&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/core/ContainerBase.java (original) +++ tomcat/trunk/java/org/apache/catalina/core/ContainerBase.java Tue Nov 29 21:57:04 2011 @@ -710,14 +710,23 @@ public abstract class ContainerBase exte return (realm); if (parent != null) return (parent.getRealm()); - return (null); + return null; } finally { l.unlock(); } - } + protected Realm getRealmInternal() { + Lock l = realmLock.readLock(); + try { + l.lock(); + return realm; + } finally { + l.unlock(); + } + } + /** * Set the Realm with which this Container is associated. * @@ -1082,7 +1091,7 @@ public abstract class ContainerBase exte ((Lifecycle) manager).start(); if ((cluster != null) && (cluster instanceof Lifecycle)) ((Lifecycle) cluster).start(); - Realm realm = getRealm(); + Realm realm = getRealmInternal(); if ((realm != null) && (realm instanceof Lifecycle)) ((Lifecycle) realm).start(); if ((resources != null) && (resources instanceof Lifecycle)) @@ -1169,7 +1178,7 @@ public abstract class ContainerBase exte if ((resources != null) && (resources instanceof Lifecycle)) { ((Lifecycle) resources).stop(); } - Realm realm = getRealm(); + Realm realm = getRealmInternal(); if ((realm != null) && (realm instanceof Lifecycle)) { ((Lifecycle) realm).stop(); } @@ -1321,7 +1330,7 @@ public abstract class ContainerBase exte log.warn(sm.getString("containerBase.backgroundProcess.manager", manager), e); } } - Realm realm = getRealm(); + Realm realm = getRealmInternal(); if (realm != null) { try { realm.backgroundProcess(); Modified: tomcat/trunk/java/org/apache/catalina/core/StandardContext.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/StandardContext.java?rev=1208096&r1=1208095&r2=1208096&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/core/StandardContext.java (original) +++ tomcat/trunk/java/org/apache/catalina/core/StandardContext.java Tue Nov 29 21:57:04 2011 @@ -5033,7 +5033,7 @@ public class StandardContext extends Con if ((cluster != null) && (cluster instanceof Lifecycle)) ((Lifecycle) cluster).start(); - Realm realm = getRealm(); + Realm realm = getRealmInternal(); if ((realm != null) && (realm instanceof Lifecycle)) ((Lifecycle) realm).start(); if ((resources != null) && (resources instanceof Lifecycle)) @@ -5380,7 +5380,7 @@ public class StandardContext extends Con // Stop resources resourcesStop(); - Realm realm = getRealm(); + Realm realm = getRealmInternal(); if ((realm != null) && (realm instanceof Lifecycle)) { ((Lifecycle) realm).stop(); } @@ -5445,7 +5445,7 @@ public class StandardContext extends Con if ((manager != null) && (manager instanceof Lifecycle)) { ((Lifecycle) manager).destroy(); } - Realm realm = getRealm(); + Realm realm = getRealmInternal(); if ((realm != null) && (realm instanceof Lifecycle)) { ((Lifecycle) realm).destroy(); } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org