This is an automated email from the ASF dual-hosted git repository.

thiagohp pushed a commit to branch TAP5-2779
in repository https://gitbox.apache.org/repos/asf/tapestry-5.git

commit b46516bedf82d87129981caf2f73a7c9dc09f0be
Author: Thiago H. de Paula Figueiredo <[email protected]>
AuthorDate: Sun Jul 7 17:46:53 2024 -0300

    TAP5-2742: don't invalidate classes when preloading contexts
---
 .../PageClassLoaderContextManagerImpl.java         | 29 ++++++++++++++--------
 1 file changed, 19 insertions(+), 10 deletions(-)

diff --git 
a/tapestry-core/src/main/java/org/apache/tapestry5/services/pageload/PageClassLoaderContextManagerImpl.java
 
b/tapestry-core/src/main/java/org/apache/tapestry5/services/pageload/PageClassLoaderContextManagerImpl.java
index 123e356b2..83b19cfb9 100644
--- 
a/tapestry-core/src/main/java/org/apache/tapestry5/services/pageload/PageClassLoaderContextManagerImpl.java
+++ 
b/tapestry-core/src/main/java/org/apache/tapestry5/services/pageload/PageClassLoaderContextManagerImpl.java
@@ -73,6 +73,8 @@ public class PageClassLoaderContextManagerImpl implements 
PageClassLoaderContext
     private Function<ClassLoader, PlasticProxyFactory> 
plasticProxyFactoryProvider;
     
     private PageClassLoaderContext root;
+    
+    private boolean preloadingContexts;
 
     public PageClassLoaderContextManagerImpl(
             final ComponentDependencyRegistry componentDependencyRegistry, 
@@ -637,7 +639,7 @@ public class PageClassLoaderContextManagerImpl implements 
PageClassLoaderContext
     }
     
     private void invalidate(Set<String> classesToInvalidate) {
-        if (!classesToInvalidate.isEmpty())
+        if (!classesToInvalidate.isEmpty() && !preloadingContexts)
         {
             LOGGER.debug("Invalidating classes {}", classesToInvalidate);
             markAsInvalidatingContext();
@@ -757,19 +759,26 @@ public class PageClassLoaderContextManagerImpl implements 
PageClassLoaderContext
         classNames.sort(ClassNameComparator.INSTANCE);
         
         int runs = 0;
+        preloadingContexts = true;
         
-        // The run counter check is to just avoid possible infinite loops,
-        // although that's very unlikely.
-        int contexts = -1;
-        while (runs < 5000 && contexts < CONTEXTS_CREATED.get().get())
+        try 
         {
-            runs++;
-            contexts = CONTEXTS_CREATED.get().get();
-            for (String className : classNames) 
+            // The run counter check is to just avoid possible infinite loops,
+            // although that's very unlikely.
+            int contexts = -1;
+            while (runs < 5000 && contexts < CONTEXTS_CREATED.get().get())
             {
-                get(className);
+                runs++;
+                contexts = CONTEXTS_CREATED.get().get();
+                for (String className : classNames) 
+                {
+                    get(className);
+                }
             }
-//            Collections.reverse(classNames);
+        }
+        finally
+        {
+            preloadingContexts = false;
         }
         
         finish = System.currentTimeMillis();

Reply via email to