You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by hl...@apache.org on 2012/05/14 18:27:26 UTC
svn commit: r1338276 -
/tapestry/tapestry5/branches/5.3/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/InternalComponentResourcesImpl.java
Author: hlship
Date: Mon May 14 16:27:25 2012
New Revision: 1338276
URL: http://svn.apache.org/viewvc?rev=1338276&view=rev
Log:
TAP5-1929: Performance improvements
Extend the lazy initialization reentrant lock to conver the conduits NamedSet as well
Modified:
tapestry/tapestry5/branches/5.3/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/InternalComponentResourcesImpl.java
Modified: tapestry/tapestry5/branches/5.3/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/InternalComponentResourcesImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.3/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/InternalComponentResourcesImpl.java?rev=1338276&r1=1338275&r2=1338276&view=diff
==============================================================================
--- tapestry/tapestry5/branches/5.3/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/InternalComponentResourcesImpl.java (original)
+++ tapestry/tapestry5/branches/5.3/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/InternalComponentResourcesImpl.java Mon May 14 16:27:25 2012
@@ -88,7 +88,7 @@ public class InternalComponentResourcesI
// Maps from parameter name to ParameterConduit, used to support mixins
// which need access to the containing component's PC's
- // Guarded by this
+ // Guarded by: lazyCreationLock
private NamedSet<ParameterConduit> conduits;
// Guarded by: lazyCreationLock
@@ -644,27 +644,68 @@ public class InternalComponentResourcesI
page.addResetListener(listener);
}
- private synchronized void resetParameterConduits()
+ private void resetParameterConduits()
{
- if (conduits != null)
+ try
+ {
+ lazyCreationLock.readLock().lock();
+
+ if (conduits != null)
+ {
+ conduits.eachValue(RESET_PARAMETER_CONDUIT);
+ }
+ } finally
{
- conduits.eachValue(RESET_PARAMETER_CONDUIT);
+ lazyCreationLock.readLock().unlock();
}
}
- public synchronized ParameterConduit getParameterConduit(String parameterName)
+ public ParameterConduit getParameterConduit(String parameterName)
{
- return NamedSet.get(conduits, parameterName);
+ try
+ {
+ lazyCreationLock.readLock().lock();
+ return NamedSet.get(conduits, parameterName);
+ } finally
+ {
+ lazyCreationLock.readLock().unlock();
+ }
}
- public synchronized void setParameterConduit(String parameterName, ParameterConduit conduit)
+ public void setParameterConduit(String parameterName, ParameterConduit conduit)
{
- if (conduits == null)
+ try
{
- conduits = NamedSet.create();
+ lazyCreationLock.readLock().lock();
+
+ if (conduits == null)
+ {
+ createConduits();
+ }
+
+ conduits.put(parameterName, conduit);
+ } finally
+ {
+ lazyCreationLock.readLock().unlock();
}
+ }
- conduits.put(parameterName, conduit);
+ private void createConduits()
+ {
+ try
+ {
+ lazyCreationLock.readLock().unlock();
+ lazyCreationLock.writeLock().lock();
+
+ if (conduits == null)
+ {
+ conduits = NamedSet.create();
+ }
+ } finally
+ {
+ lazyCreationLock.readLock().lock();
+ lazyCreationLock.writeLock().unlock();
+ }
}