You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by kw...@apache.org on 2021/10/19 17:58:37 UTC

[jackrabbit-filevault] branch master updated: JCRVLT-531 close URLClassLoader prior to deleting JAR file (#174)

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

kwin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/jackrabbit-filevault.git


The following commit(s) were added to refs/heads/master by this push:
     new 534137f  JCRVLT-531 close URLClassLoader prior to deleting JAR file (#174)
534137f is described below

commit 534137f896cf86fc66737407183a67faf6b0c88c
Author: Konrad Windszus <kw...@apache.org>
AuthorDate: Tue Oct 19 19:58:31 2021 +0200

    JCRVLT-531 close URLClassLoader prior to deleting JAR file (#174)
    
    allows to delete tmp jar files on Windows
---
 .../packaging/impl/InstallHookProcessorImpl.java    | 21 +++++++++++++++------
 1 file changed, 15 insertions(+), 6 deletions(-)

diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/InstallHookProcessorImpl.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/InstallHookProcessorImpl.java
index 69e41c6..bac0b65 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/InstallHookProcessorImpl.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/InstallHookProcessorImpl.java
@@ -181,6 +181,8 @@ public class InstallHookProcessorImpl implements InstallHookProcessor {
 
         private ClassLoader parentClassLoader;
 
+        private URLClassLoader urlClassLoader;
+
         private InstallHook hook;
 
         private String mainClassName;
@@ -201,6 +203,9 @@ public class InstallHookProcessorImpl implements InstallHookProcessor {
         private void destroy() throws IOException {
             parentClassLoader = null;
             hook = null;
+            if (urlClassLoader != null) {
+                urlClassLoader.close();
+            }
             if (jarFile != null) {
                 Files.deleteIfExists(jarFile);
             }
@@ -224,19 +229,23 @@ public class InstallHookProcessorImpl implements InstallHookProcessor {
                     if (parentClassLoader == null) {
                         try {
                             // 1st fallback is the current classes classloader (the bundle classloader in the OSGi context)
-                            loadMainClass(URLClassLoader.newInstance(
+                            urlClassLoader = URLClassLoader.newInstance(
                                     new URL[] { jarFile.toUri().toURL() },
-                                    this.getClass().getClassLoader()));
+                                    this.getClass().getClassLoader());
+                            loadMainClass(urlClassLoader);
                         } catch (ClassNotFoundException cnfe) {
+                            urlClassLoader.close();
                             // 2nd fallback is the thread context classloader
-                            loadMainClass(URLClassLoader.newInstance(
+                            urlClassLoader = URLClassLoader.newInstance(
                                     new URL[] { jarFile.toUri().toURL() },
-                                    Thread.currentThread().getContextClassLoader()));
+                                    Thread.currentThread().getContextClassLoader());
+                            loadMainClass(urlClassLoader);
                         }
                     } else {
-                        loadMainClass(URLClassLoader.newInstance(
+                        urlClassLoader = URLClassLoader.newInstance(
                                 new URL[] { jarFile.toUri().toURL() },
-                                parentClassLoader));
+                                parentClassLoader);
+                        loadMainClass(urlClassLoader);
                     }
                 } else {
                     // create classloader