Chk previous jre.

On Fri, Sep 26, 2025, 8:59 AM clinmanc (via GitHub) <[email protected]> wrote:

>
> clinmanc opened a new issue, #911:
> URL: https://github.com/apache/poi/issues/911
>
>    ## Description
>
>    When using `TempFilePOIFSFileSystem`, the implementation of `close()`
> attempts to delete the temporary file before calling `super.close()`.
>    This ordering can cause the temporary file deletion to fail, because
> the underlying `FileBackedDataSource` may still hold an open file handle
> until `super.close()` is executed. On Windows in particular, this typically
> results in the temp file remaining on disk after closing.
>
>    ### Current Code (POI 5.4.1, `TempFilePOIFSFileSystem.java`)
>
>    ```java
>    @Override
>    public void close() throws IOException {
>        if (tempFile != null && tempFile.exists()) {
>            if (!tempFile.delete()) {
>                LOG.atDebug().log("temp file was already deleted (probably
> due to previous call to close this resource)");
>            }
>        }
>        super.close();
>    }
>    ```
>
>    ## Problem
>
>    - The `delete()` call happens before `super.close()`.
>
>    - On platforms with strict file locking (e.g., Windows), the temp file
> cannot be deleted while still in use.
>
>    - This leads to temp files not being cleaned up as expected.
>
>    ## Suggested Fix
>
>    Change the order: call `super.close()` first (to release handles), then
> delete the temp file.
>
>    ```java
>    @Override
>    public void close() throws IOException {
>        try {
>            super.close();
>        } finally {
>            if (tempFile != null && tempFile.exists()) {
>                if (!tempFile.delete()) {
>                    LOG.atDebug().log("temp file was already deleted
> (probably due to previous call to close this resource)");
>                }
>            }
>        }
>    }
>    ```
>
>    ## Environment
>
>    Apache POI: 5.4.1
>
>    JDK: Java 17
>
>    OS: Windows 11 (issue most reproducible), also affects Linux if the
> file is still mapped.
>
>    ## Expected Behavior
>
>    Temporary file should always be deleted after closing the
> `TempFilePOIFSFileSystem`.
>
>    ## Actual Behavior
>
>    On Windows, temp file remains because deletion happens before file
> handles are closed.
>
>
> --
> This is an automated message from the Apache Git Service.
> To respond to the message, please log on to GitHub and use the
> URL above to go to the specific comment.
>
> To unsubscribe, e-mail: [email protected]
>
> For queries about this service, please contact Infrastructure at:
> [email protected]
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>

Reply via email to