RFR: 8132359 - JarURLConnection.getJarFile() resource leak when file is not found

Daniel Fuchs daniel.fuchs at oracle.com
Mon Nov 25 10:47:53 UTC 2019


Hi Rob,

That looks good to me. I wonder if that should go to corelibs for
review as well.

The underlying issue here is that JarURLConnection open both its
jar file and its jar file entry in its connect() method.
However, it delegates the opening of the jar file to the cache,
when uses cache is true.
In this latter case, if opening the entry throws an exception,
it can't close the jar file because the file might have come from
the cache and it might still be used by someone else.
But because getJarFile() calls connect() then there's no way
to retrieve the jar file through that (failed) connection.

I agree that fixing the issue in URLClassPath is probably the
less risky.

I see that your test caters for all possible setting of uses cache
and combination of success/failure when opening the jar entry,
so this give me confidence that the fix is working as intended.

best regards,

-- daniel


On 24/11/2019 15:33, Rob McKenna wrote:
> Hi folks,
> 
> If a FileNotFoundException is thrown when attempting to load a class
> from a jar file, a reference to the open JarFile remains even after the
> loader is closed. The test in the webrev demonstrates the problem by
> attempting to delete the JarFile after attempting a class load.
> 
> The deletion will fail as the JarFile is still in use (i.e. open)
> despite the fact that the loader has been closed.
> 
> Note: the behaviour depends on the URLConnections useCaches setting so
> the test cycles through the combinations. (this helpfully found a problem
> with an earlier fix attempt)
> 
> bug: https://bugs.openjdk.java.net/browse/JDK-8132359
> webrev: http://cr.openjdk.java.net/~robm/8132359/webrev.01/
> 
> Thanks,
> 
>      -Rob
> 



More information about the net-dev mailing list