ASF Bugzilla – Attachment 27851 Details for
Bug 52091
TagHandlerPool is slow when high concurrently
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Reduce lock patch
taghandler-pool.patch (text/plain), 6.18 KB, created by
Taiki Sugawara
on 2011-10-26 10:41:29 UTC
(
hide
)
Description:
Reduce lock patch
Filename:
MIME Type:
Creator:
Taiki Sugawara
Created:
2011-10-26 10:41:29 UTC
Size:
6.18 KB
patch
obsolete
>--- 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-patch/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<String> getInitParameterNames() { > >- synchronized (parameters) { >+ try { >+ parametersLock.readLock().lock(); > return (new Enumerator<String>(parameters.keySet())); >+ } finally { >+ parametersLock.readLock().unlock(); > } > > } >diff -ur apache-tomcat-7.0.19-src/java/org/apache/jasper/runtime/TagHandlerPool.java apache-tomcat-7.0.19-src-patch/java/org/apache/jasper/runtime/TagHandlerPool.java >--- 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-patch/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;
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 52091
: 27851 |
27862