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();
+        }
     }