--- apache-tomcat-7.0.19-src/java/org/apache/catalina/core/StandardWrapper.java 2011-07-14 07:35:11.000000000 +0900 +++ apache-tomcat-7.0.19-src/java/org/apache/catalina/core/StandardWrapper.java 2011-09-03 13:39:47.512336473 +0900 @@ -26,6 +26,7 @@ import java.util.HashSet; import java.util.Stack; import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.locks.ReentrantReadWriteLock; import javax.management.ListenerNotFoundException; import javax.management.MBeanNotificationInfo; @@ -293,6 +294,9 @@ ServletRequest.class, ServletResponse.class}; + private final ReentrantReadWriteLock parametersLock = new ReentrantReadWriteLock(); + private final ReentrantReadWriteLock mappingsLock = new ReentrantReadWriteLock(); + private final ReentrantReadWriteLock referencesLock = new ReentrantReadWriteLock(); // ------------------------------------------------------------- Properties @@ -731,8 +735,11 @@ @Override public void addInitParameter(String name, String value) { - synchronized (parameters) { + try { + parametersLock.writeLock().lock(); parameters.put(name, value); + } finally { + parametersLock.writeLock().unlock(); } fireContainerEvent("addInitParameter", name); @@ -760,8 +767,11 @@ @Override public void addMapping(String mapping) { - synchronized (mappings) { + try { + mappingsLock.writeLock().lock(); mappings.add(mapping); + } finally { + mappingsLock.writeLock().unlock(); } if(parent.getState().equals(LifecycleState.STARTED)) fireContainerEvent(ADD_MAPPING_EVENT, mapping); @@ -779,8 +789,11 @@ @Override public void addSecurityReference(String name, String link) { - synchronized (references) { + try { + referencesLock.writeLock().lock(); references.put(name, link); + } finally { + referencesLock.writeLock().unlock(); } fireContainerEvent("addSecurityReference", name); @@ -935,8 +948,11 @@ @Override public String findInitParameter(String name) { - synchronized (parameters) { + try { + parametersLock.readLock().lock(); return parameters.get(name); + } finally { + parametersLock.readLock().unlock(); } } @@ -949,9 +965,12 @@ @Override public String[] findInitParameters() { - synchronized (parameters) { + try { + parametersLock.readLock().lock(); String results[] = new String[parameters.size()]; return parameters.keySet().toArray(results); + } finally { + parametersLock.readLock().unlock(); } } @@ -963,8 +982,11 @@ @Override public String[] findMappings() { - synchronized (mappings) { + try { + mappingsLock.readLock().lock(); return mappings.toArray(new String[mappings.size()]); + } finally { + mappingsLock.readLock().unlock(); } } @@ -979,8 +1001,11 @@ @Override public String findSecurityReference(String name) { - synchronized (references) { + try { + referencesLock.readLock().lock(); return references.get(name); + } finally { + referencesLock.readLock().unlock(); } } @@ -993,9 +1018,12 @@ @Override public String[] findSecurityReferences() { - synchronized (references) { + try { + referencesLock.readLock().lock(); String results[] = new String[references.size()]; return references.keySet().toArray(results); + } finally { + referencesLock.readLock().unlock(); } } @@ -1251,8 +1279,11 @@ @Override public void removeInitParameter(String name) { - synchronized (parameters) { + try { + parametersLock.writeLock().lock(); parameters.remove(name); + } finally { + parametersLock.writeLock().unlock(); } fireContainerEvent("removeInitParameter", name); @@ -1280,8 +1311,11 @@ @Override public void removeMapping(String mapping) { - synchronized (mappings) { + try { + mappingsLock.writeLock().lock(); mappings.remove(mapping); + } finally { + mappingsLock.writeLock().unlock(); } if(parent.getState().equals(LifecycleState.STARTED)) fireContainerEvent(REMOVE_MAPPING_EVENT, mapping); @@ -1297,8 +1331,11 @@ @Override public void removeSecurityReference(String name) { - synchronized (references) { + try { + referencesLock.writeLock().lock(); references.remove(name); + } finally { + referencesLock.writeLock().unlock(); } fireContainerEvent("removeSecurityReference", name); @@ -1508,8 +1545,11 @@ @Override public Enumeration getInitParameterNames() { - synchronized (parameters) { + try { + parametersLock.readLock().lock(); return (new Enumerator(parameters.keySet())); + } finally { + parametersLock.readLock().unlock(); } } --- apache-tomcat-7.0.19-src/java/org/apache/jasper/runtime/TagHandlerPool.java 2011-07-14 07:35:13.000000000 +0900 +++ apache-tomcat-7.0.19-src/java/org/apache/jasper/runtime/TagHandlerPool.java 2011-09-16 23:39:10.604748522 +0900 @@ -38,7 +38,7 @@ public static final String OPTION_TAGPOOL = "tagpoolClassName"; public static final String OPTION_MAXSIZE = "tagpoolMaxSize"; - private final Log log = LogFactory.getLog(TagHandlerPool.class); + private final static Log log = LogFactory.getLog(TagHandlerPool.class); // index of next available tag handler private int current;