On Tue, 8 Jun 2021 12:20:32 GMT, Jorn Vernee <[email protected]> wrote:

> WRT the test failure on Windows discussed offline: when the directory is 
> deleted as a result of a `PluginException` being thrown, there is still an 
> open file handle on the `lib/modules` file in the image directory, which 
> prevents the directory from being deleted.
> 
> Bisecting this, it seems that the file handle is being created in 
> `ImageFileCreater::writeImage` with a call to 
> `plugins.getJImageFileOutputStream` 
> (https://github.com/openjdk/jdk/blob/master/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/ImageFileCreator.java#L162).
>  This creates an output stream that is never closed.
> 
> Following patch fixes:
> 
> ```
> diff --git 
> a/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/ImageFileCreator.java 
> b/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/ImageFileCreator.java
> index 749025bea9d..8beddc5a037 100644
> --- 
> a/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/ImageFileCreator.java
> +++ 
> b/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/ImageFileCreator.java
> @@ -158,8 +158,10 @@ public final class ImageFileCreator {
>          BasicImageWriter writer = new BasicImageWriter(byteOrder);
>          ResourcePoolManager allContent = createPoolManager(archives,
>                  entriesForModule, byteOrder, writer);
> -        ResourcePool result = generateJImage(allContent,
> -             writer, plugins, plugins.getJImageFileOutputStream());
> +        ResourcePool result;
> +        try (DataOutputStream out = plugins.getJImageFileOutputStream()) {
> +            result = generateJImage(allContent, writer, plugins, out);
> +        }
> 
>          //Handle files.
>          try {
> ```

Thanks @JornVernee

-------------

PR: https://git.openjdk.java.net/jdk/pull/4386

Reply via email to