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

lukaszlenart pushed a commit to branch WW-5537-classloader-leak-fixes
in repository https://gitbox.apache.org/repos/asf/struts.git

commit fe9cb65176c145feeb4e8a745717f4b7df010238
Author: Lukasz Lenart <[email protected]>
AuthorDate: Mon Mar 23 09:57:06 2026 +0100

    WW-5537 CompoundRootAccessor, DefaultFileManager: implement 
InternalDestroyable
    
    Co-Authored-By: Claude Opus 4.6 <[email protected]>
---
 .../struts2/ognl/accessor/CompoundRootAccessor.java      | 15 ++++++++++++++-
 .../org/apache/struts2/util/fs/DefaultFileManager.java   | 16 +++++++++++++++-
 2 files changed, 29 insertions(+), 2 deletions(-)

diff --git 
a/core/src/main/java/org/apache/struts2/ognl/accessor/CompoundRootAccessor.java 
b/core/src/main/java/org/apache/struts2/ognl/accessor/CompoundRootAccessor.java
index d4cc814dd..0f95de9e5 100644
--- 
a/core/src/main/java/org/apache/struts2/ognl/accessor/CompoundRootAccessor.java
+++ 
b/core/src/main/java/org/apache/struts2/ognl/accessor/CompoundRootAccessor.java
@@ -18,6 +18,7 @@
  */
 package org.apache.struts2.ognl.accessor;
 
+import org.apache.struts2.dispatcher.InternalDestroyable;
 import org.apache.struts2.inject.Inject;
 import org.apache.struts2.ognl.OgnlValueStack;
 import org.apache.struts2.util.CompoundRoot;
@@ -57,7 +58,7 @@ import static org.apache.commons.lang3.BooleanUtils.toBoolean;
  * @author Rainer Hermanns
  * @version $Revision$
  */
-public class CompoundRootAccessor implements RootAccessor {
+public class CompoundRootAccessor implements RootAccessor, InternalDestroyable 
{
 
     /**
      * Used by OGNl to generate bytecode
@@ -322,6 +323,18 @@ public class CompoundRootAccessor implements RootAccessor {
     }
 
 
+    public static void clearCache() {
+        invalidMethods.clear();
+    }
+
+    /**
+     * @since 7.1.0
+     */
+    @Override
+    public void destroy() {
+        clearCache();
+    }
+
     static class MethodCall {
         Class clazz;
         String name;
diff --git 
a/core/src/main/java/org/apache/struts2/util/fs/DefaultFileManager.java 
b/core/src/main/java/org/apache/struts2/util/fs/DefaultFileManager.java
index 82bf06348..e92fa89b4 100644
--- a/core/src/main/java/org/apache/struts2/util/fs/DefaultFileManager.java
+++ b/core/src/main/java/org/apache/struts2/util/fs/DefaultFileManager.java
@@ -19,6 +19,7 @@
 package org.apache.struts2.util.fs;
 
 import org.apache.struts2.FileManager;
+import org.apache.struts2.dispatcher.InternalDestroyable;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
@@ -40,7 +41,7 @@ import static java.util.Objects.requireNonNullElseGet;
 /**
  * Default implementation of {@link FileManager}
  */
-public class DefaultFileManager implements FileManager {
+public class DefaultFileManager implements FileManager, InternalDestroyable {
 
     private static final Logger LOG = 
LogManager.getLogger(DefaultFileManager.class);
 
@@ -56,6 +57,19 @@ public class DefaultFileManager implements FileManager {
     public DefaultFileManager() {
     }
 
+    public static void clearCache() {
+        files.clear();
+        lazyMonitoredFilesCache.clear();
+    }
+
+    /**
+     * @since 7.1.0
+     */
+    @Override
+    public void destroy() {
+        clearCache();
+    }
+
     public void setReloadingConfigs(boolean reloadingConfigs) {
         if (reloadingConfigs && !this.reloadingConfigs) {
             //starting monitoring cached not-monitored files (lazy monitoring 
on demand because of performance)

Reply via email to