From 986015ee3de05fc60a7fee320a8a481a3fd3ade6 Mon Sep 17 00:00:00 2001 From: sdiedrichsen Date: Tue, 27 Jan 2026 00:16:23 +0100 Subject: [PATCH] using internal static class to wrap targetDir state of Temp to allow file cleanup Temp instance is GC'd --- .../admin/payload/PayloadFilesManager.java | 38 +++++++++---------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/nucleus/common/common-util/src/main/java/org/glassfish/admin/payload/PayloadFilesManager.java b/nucleus/common/common-util/src/main/java/org/glassfish/admin/payload/PayloadFilesManager.java index 65018455b1f..75371530b10 100644 --- a/nucleus/common/common-util/src/main/java/org/glassfish/admin/payload/PayloadFilesManager.java +++ b/nucleus/common/common-util/src/main/java/org/glassfish/admin/payload/PayloadFilesManager.java @@ -51,6 +51,8 @@ import java.io.InputStream; import java.io.OutputStream; import org.glassfish.hk2.utilities.CleanerFactory; + +import java.lang.ref.Cleaner; import java.net.URI; import java.sql.SQLException; import java.util.ArrayList; @@ -290,16 +292,22 @@ protected void postProcessParts() { */ public static class Temp extends PayloadFilesManager { -// /* -// * regex to match colons and backslashes on Windows and slashes on non-Windows -// */ -// private static final String DIR_PATH_TO_FLAT_NAME_PATTERN = (File.separatorChar == '\\') ? -// "[:\\\\]" : "/"; + private final Cleaner.Cleanable cleanable; + + static class CleanableTempPayloadFilesManagerState implements Runnable { + + private final File targetDir; - private boolean isCleanedUp = false; + CleanableTempPayloadFilesManagerState(File targetDir) { + this.targetDir = targetDir; + } -// /** maps payload part name paths (excluding name and type) to temp file subdirs */ -// private Map pathToTempSubdir = new HashMap(); + @Override + public void run() { + FileUtils.whack(this.targetDir); + } + + } public Temp(final File parentDir, final ActionReport report, final Logger logger) throws IOException { @@ -308,7 +316,8 @@ public Temp(final File parentDir, final ActionReport report, logger), report, logger); - registerCleanupEvent(); + CleanableTempPayloadFilesManagerState state = new CleanableTempPayloadFilesManagerState(super.targetDir); + this.cleanable = CleanerFactory.create().register(this, state); } /** * Creates a new PayloadFilesManager for temporary files. @@ -333,16 +342,7 @@ public Temp(final Logger logger) throws IOException { * Deletes the temporary files created by this temp PayloadFilesManager. */ public void cleanup() { - if ( ! isCleanedUp) { - FileUtils.whack(super.targetDir); - isCleanedUp = true; - } - } - - public final void registerCleanupEvent() { - CleanerFactory.create().register(this, () -> { - cleanup(); - }); + this.cleanable.clean(); } @Override