git: openjdk/jdk: 6956385: URLConnection.getLastModified() leaks file handles for jar:file and file: URLs

Michael McMahon michaelm at openjdk.org
Wed Jun 28 15:35:50 UTC 2023


Changeset: 9f98136c
Author:    Jesse Glick <jglick at cloudbees.com>
Committer: Michael McMahon <michaelm at openjdk.org>
Date:      2023-06-28 15:33:37 +0000
URL:       https://git.openjdk.org/jdk/commit/9f98136c3a00ca24d59ffefd58308603b58110c7

6956385: URLConnection.getLastModified() leaks file handles for jar:file and file: URLs

Define FileURLConnection.closeInputStream for use by JarURLInputStream.close.
JarURLConnection properly tracks any InputStream it itself opened,
and correspondingly closes the JarFile if necessary (when caches are disabled).
But if its underlying FileURLConnection was used to retrieve a header field,
that would have caused a FileInputStream to be opened
which never gets closed until it is garbage collected.
This means that an application which calls certain methods
on jar:file:/…something.jar!/… URLs will leak file handles,
even if URLConnection caches are supposed to be turned off.
This can delay release of system resources,
and on Windows can prevent the JAR file from being deleted
even after it is no longer in use (for example after URLClassLoader.close).

Reviewed-by: dfuchs, michaelm

! src/java.base/share/classes/sun/net/www/protocol/file/FileURLConnection.java
! src/java.base/share/classes/sun/net/www/protocol/jar/JarURLConnection.java
+ test/jdk/sun/net/www/protocol/jar/FileURLConnectionLeak.java



More information about the jdk-changes mailing list